检查对象数组是否包含布尔值true / false

时间:2016-03-24 21:34:12

标签: javascript

我有一个数组对象,默认情况下每个数组都是[false,false],它对应的是一个带有yes和no选项的复选框。如果用户检查是,则数组将更新为[true,false],如果用户回答否,则数组将更新[false,true]。

我的对象的视觉表示

Object
   |
   |-> 1 
       |-> [false,false]
   |-> 2 
       |-> [false,false]
...

我尝试了以下但是它不是我需要的,因为它似乎没有检查数组的第二个索引。

  for (var idx = 1; idx <=6  ; idx++)   {
    if (DataObj[idx].indexOf(true))
    {
      console.log("Not Answered");
    }
    else 
    {
      console.log("Answered");
    }

代码输出

[true, false]
Answered
[false, true]
Not Answered

预期输出

[true, false]
Answered
[false, true]
Answered
[false, false]
Not answered

我也试过($.inArray(true, DataObj[idx])),但这不起作用,或者我遗漏了一些东西。我正朝着正确的方向前进吗?

6 个答案:

答案 0 :(得分:0)

$.inArray(item, array)Array.prototype.indexOf(item)返回数组中项目的索引(如果找到),否则返回-1。 if (a.indexOf(x))仅检查索引是否为零。您必须检查索引是否不是-1,或者至少为零:

for (var idx = 1; idx <=6  ; idx++)   {
    if (DataObj[idx].indexOf(true) >= 0)

答案 1 :(得分:0)

您目前只是查看是否真的&#39;在数组中,如果它只返回FIRST索引为true,你可以使用lastIndexOf(true)获得创意 但逻辑可能会开始变得毛茸茸

你还需要在indexOf()中添加一点检查,它返回-1或索引,所以-1表示不存在:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

更好的是,您可以循环遍历该数组,如下所示:

  for (var idx = 1; idx <=6  ; idx++)   {
    var array = DataObj[idx];
    for (var i = 0; i < array.length; i++) {
      // here you will loop through the entire array and see both 'i' indexes
    }
    if (DataObj[idx].indexOf(true) > -1) // you need to do this here as well
    {
      console.log("Not Answered");
    }
    else 
    {
      console.log("Answered");
    }

答案 2 :(得分:0)

您可以将Array#some()Boolean一起用作回调。

var object = { 0: [true, false], 1: [false, true], 2: [false, false] };

document.write(Object.keys(object).map(function (k) {
    return object[k].some(Boolean) ? 'Answered' : 'Not answered';
}).join('<br>'));

答案 3 :(得分:0)

您可以使用reduce功能和logic OR||

var j = { 1: [true, false], 2: [false, true], 3: [false, false] };

var r = Object.keys(j).map(e => j[e].reduce((p, c) => p || c, false));

document.write(r.map(e => e ? ' Answered' : ' Not answered '))

答案 4 :(得分:0)

我最终使用以下作为解决方案

  for (var idx = 1; idx <=6  ; idx++)   {
    qcomplete = qcomplete + (surveyDataObj[idx][0] ? 1 : 0);
    qcomplete = qcomplete + (surveyDataObj[idx][1] ? 1 : 0);
  }

答案 5 :(得分:-1)

我建议使用jQuery。

&#13;
&#13;
var a = {
  a1: [false, false]
};

$("#b1").change(function() {                 // <-- when checkbox status is changing
  if($(this).is(":checked")){
    a.a1[0]=true;
    a.a1[1]=false;
    $("body").append(JSON.stringify(a.a1));  // <-- just for the output
  }else{
    a.a1[0]=false;
    a.a1[1]=true;
    $("body").append(JSON.stringify(a.a1));  // <-- just for the output
  }
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input id="b1" type="checkbox"></input>
&#13;
&#13;
&#13;