Javascript 仅当所有数组元素相同时才执行函数

Javascript 仅当所有数组元素相同时才执行函数,javascript,Javascript,我有一个带有布尔值的数组: 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 so

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

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
   }
}
for(变量i=0;i
indexOf
函数

indexOf
功能将有助于:

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
}
var数组=[false,false,false];
var标志=真;
对于(var i=0;i
Gues这将有助于:

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
}
var数组=[false,false,false];
var标志=真;
对于(var i=0;i
史蒂夫的方法更好,但如果你想用你的方法,那就更好了

var allFalse = true, i;

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

if (allFalse) {
    functionA();
}
如果您想让泛型函数检查所有元素是否相同,可以这样做

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

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

    return true;
}
函数checkAllSameValue(数组){
var first=数组[0],i;
对于(i=1;i
史蒂夫的方法更好,但如果你想用你的方法,那就更好了

var allFalse = true, i;

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

if (allFalse) {
    functionA();
}
如果您想让泛型函数检查所有元素是否相同,可以这样做

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

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

    return true;
}
函数checkAllSameValue(数组){
var first=数组[0],i;
对于(i=1;i
您可以执行以下操作:

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。发布的解决方案中没有一个涉及稀疏数组,因此没有一个是通用解决方案。

您可以执行以下操作:

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。发布的解决方案中没有一个涉及稀疏数组,因此没有一个是通用解决方案。

您描述它的方式与标题略有不同。如果你只是在函数都是假的情况下才尝试执行,那么Steve的答案很好。根据这个数组的来源,我可能会像这样扩展它,不过,为了防御性:

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
}
var runFunction=true;
var-previousVal=-1;
对于(var i=0;i
您描述它的方式与标题略有不同。如果你只是在函数都是假的情况下才尝试执行,那么Steve的答案很好。根据这个数组的来源,我可能会像这样扩展它,不过,为了防御性:

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
}
var runFunction=true;
var-previousVal=-1;
对于(var i=0;i
这是不一样的。有问题的代码每次调用function()以查找false。但您的答案不是。@BenjaminCox:null不是布尔值。@BenjaminCox:它也可以包含
15
。但是OP说的是“布尔值”,这不是问题。快乐编码。@minitech他在标题中还说“仅当所有数组元素都相同时才执行函数”,但随后在描述中将其改为“仅当所有元素都为false时”。只是想说得透彻一点,以防他的语言不准确。这是不一样的。有问题的代码每次调用function()以查找false。但您的答案不是。@BenjaminCox:null不是布尔值。@BenjaminCox:它也可以包含
15
。但是OP说的是“布尔值”,这不是问题。快乐编码。@minitech他在标题中还说“仅当所有数组元素都相同时才执行函数”,但随后在描述中将其改为“仅当所有元素都为false时”。如果他的语言不准确,那么就尽量做到透彻。相同的应该是
==
,但看起来这可能不完全是所要求的。(但是是的…
checkAllSameValue(0,false,,[])