Javascript While循环值测试

Javascript While循环值测试,javascript,arrays,object,testing,while-loop,Javascript,Arrays,Object,Testing,While Loop,我有一个对象数组,其中包含一个带有true或false的键值。这些值以false开头,但在完成工作后切换为true。我希望确定所有值何时完成,即所有值都切换为true。while循环中是否存在偏差(下面的逻辑)以及可能解决此问题的testif语句 basicarray = [{"value" : false}, {"value" : false}, {"value" : false}, {"value" : false}, {"value"

我有一个对象数组,其中包含一个带有true或false的键值。这些值以false开头,但在完成工作后切换为true。我希望确定所有值何时完成,即所有值都切换为true。while循环中是否存在偏差(下面的逻辑)以及可能解决此问题的testif语句

basicarray = [{"value" : false}, {"value" : false},
              {"value" : false}, {"value" : false},
              {"value" : false}  ];
非工作逻辑


totalcount=0;
while(总计数
使用==代替=:

if(basicarray[a].value == true)  // Notice the ==
{
   totalcount++;    // this better than totalcount = totalcount + 1
}


这将在开始时对数组元素进行计数,然后在元素为真时从计数器中减去。计数器为零后,所有元素都应为真

  var basicarray = [{"value" : true}, {"value" : true},
                {"value" : true}, {"value" : true},
                {"value" : true}  ];

  var c = basicarray.length;
  for(var i = 0; i < basicarray.length; i++) {
    if(basicarray[i].value) c--;
  }

  if(c == 0) {
    alert('All True');
  } 
var basicarray=[{“value”:true},{“value”:true},
{“value”:true},{“value”:true},
{“value”:true}];
var c=基本卡雷长度;
对于(变量i=0;i
您基本上只是从功能范例中对每个
进行了一次
。以下是等效的:

var result = true;

for ( var i=0, l=basicarray.length; i<l; i++ ) {
    result = basicarray[i].value;

    // If result is ever false, there's no point in continuing
    if ( !result ) { break; }
}

console.log(result);
var结果=true;
对于(var i=0,l=basicarray.length;i这是我的解

for (j in basicarray) {
   if (!basicarray[j].value) {break;}
   else {
      if (basicarray.length-1 == j) {
       alert("all complete");
      }
   }
}

如果你知道类型,最好使用
==
。如果
basicarray[a].value!的实例是
true
@Justin-你在哪里看到递归?OP有
while(totalcount
如果
totalcount
的每个元素的
BasicArray
内部都没有增加,那么
while
循环将永远不会退出。哦,完全忽略了这一点。你的解决方案很好。在数组上迭代时,你应该使用正常的
for
循环,在对象属性上迭代时,你应该使用
for..in
循环。另外,注册在
循环中使用
for..时,您应该始终进行防御性编程(例如,您应该始终检查
hasOwnProperty
方法)。是的,您绝对正确。不确定我为什么在
语句中使用
for..。我现在已经更正了这一点。为什么
result=result&&basicarray[I].value;
?只要
result=basicarray[i].value;
就可以了。你说得对。在我添加中断之前,我本来就有这个,这就多余了。
var result = true;

for ( var i=0, l=basicarray.length; i<l; i++ ) {
    result = basicarray[i].value;

    // If result is ever false, there's no point in continuing
    if ( !result ) { break; }
}

console.log(result);
for (j in basicarray) {
   if (!basicarray[j].value) {break;}
   else {
      if (basicarray.length-1 == j) {
       alert("all complete");
      }
   }
}