1

我有一个带有布尔值的数组:

var array = [false, false, false];

我只想在所有元素都是false.

我试过了,但没有用,因为它会为每个执行函数false

for(var i = 0; i < array.length; i++){
   if(array[i] === false){
      functionA();   //This function ran at every false
   }else{
      //Do something else
   }
}
4

5 回答 5

8
if (array.indexOf(true) == -1) {
    functionA();
}

indexOf函数返回可以在数组中找到给定元素的第一个索引,如果不存在,则返回 -1。

于 2012-11-29T04:42:34.560 回答
1

您可以执行以下操作:

function checkAllSameValue(array) {
  var identical = true;
  var i = 0;

  while ((i + 1) in array && identical) {
    identical = array[i] == array[++i];
  }

  return identical;
}

检查每个成员是否与下一个成员相同

编辑

针对 ilia choly 的性能和查找问题,这里有一个与 for 循环一样快的替代方案,可能更快,具体取决于 UA:

function checkAllSameValue(array) {
  var i = array.length;
  var value = array[--i];

  while (i) {
    if (arr[--i] != value) return false
  }
  return true;
}

是否使用=====应该使用取决于 OP。发布的解决方案都没有处理稀疏数组,因此没有一个是通用解决方案。

于 2012-11-29T04:49:38.530 回答
0

猜猜这会有所帮助:

var array = [false, false, false];
var flag = true;
for(var i = 0; i < array.length; i++){
   if(array[i]!= false){
    flag = false;
    break;
   }
}
if(flag){
  functionA();   //This function call function only once
}
于 2012-11-29T04:45:57.560 回答
0

史蒂夫的方法更好,但如果你要使用你的方法,那就是

var allFalse = true, i;

for(i = 0; i < array.length; i++) {
    if(array[i]){
        allFalse = false;
        break;
    }
}

if (allFalse) {
    functionA();
}

或者

if (array.every(function(val) { return !val; })) {
    functionA();
}

如果您想要一个通用函数来检查所有元素是否相同,您可以这样做

function checkAllSameValue(array) {
    var first = array[0], i;

    for (i = 1; i < array.length; i++) {
        if (array[i] !== first) return false;
    }

    return true;
}
于 2012-11-29T04:46:04.917 回答
0

您描述它的方式与标题略有不同。如果您只是在它们都是错误的情况下尝试执行该功能,那么史蒂夫的回答很棒。不过,根据这个数组的来源,我可能会像这样扩展它,以防备它:

if (array.indexOf(true) == -1 && array.indexOf(null) == -1) {
    functionA();
}

OTOH,如果您想在它们都相同的任何时候运行它,那么您将需要更复杂的逻辑。

在这种情况下,我可能会设置一个标志,在循环中更新它,然后在循环之后执行函数调用。您还需要一个变量来跟踪先前的值。如果任何值与其先前的值不匹配,则它们并不完全相同,因此您将标志设置为 false。然后,在循环之后,您检查标志并运行该函数,如果它是真的。

像这样的东西:

var runFunction = true;
var previousVal = -1;
for (var i = 0; i < array.length; i++){
   if(previousVal === -1) {
      previousVal = array[i];
   }
   if(array[i] !== previousVal){
      runFunction = false;
      break;
   }
}
if (runFunction) {
   functionA();
} else {
   // Do something else
}
于 2012-11-29T04:58:03.557 回答