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,,[])