多维布尔数组检查Javascript中是否全部为true

时间:2012-04-10 22:03:43

标签: javascript jquery multidimensional-array boolean

我有一个bool的多维数组,每个元素都设置为true:

var boolarray = $ .extend(true,[],board);

board是一个3x3多维字符串数组。 boolarray只是一个深刻的副本。

     for (var i=0; i < boolarray.length; i++) {
              boolarray[i]
              for (var j=0; j < boolarray[i].length; j++) {
                boolarray[i][j] = true;
              };
            };     

这给了我:

boolarray = [true,true,true,true,true,true,true,true,true]

我想检查所有元素是否都为真,如果是这种情况则返回。但是我的方法不起作用。

if (boolarray == true)
{
console.log("all elements in boolarray are true, return true ")
return true;
}
else 
{
console.log("not all elements in boolarray are true, return false")
return false;
}

我应该如何检查boolarray是否都是真的?

11 个答案:

答案 0 :(得分:26)

使用.every() ...

var boolarray = [true,true,true,true,true,true,true,true,true];

boolarray.every(Boolean);

DEMO: http://jsfiddle.net/gFX7X/


如果第一个循环的唯一目的是创建第二个循环,那么你可以跳过它并执行此操作......

var boolarray = [[true, true, true], 
                 [true, true, true], 
                 [true, true, true]];

boolarray.every(function(arr) {
    return arr.every(Boolean)
}); 

DEMO: http://jsfiddle.net/gFX7X/1/


或者前一个版本略短的版本:

boolarray.every(Function.call.bind(Boolean, null))

答案 1 :(得分:3)

作为使用布尔数组的替代方法,为什么不使用简单的十六进制数来存储你的电路板(然后使用位操作来改变/测试),即

000 000 001

==

1decimal

111 111 111

==

511(256 + 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1)

设置一个板位置为true或false会变成一点点操作,测试会变得像parseInt = 511一样简单......

请参阅bit manipulation in javascript

答案 2 :(得分:1)

编写一个在给定参数(我们的2d数组)上运行循环的函数,并检查每个单元格是否为true。如果没有,则返回false。 循环之后,返回true;

答案 3 :(得分:1)

您需要再次遍历数组以检查所有值;与你如何分配它们的方式非常类似:

for (var i=0; i < boolarray.length; i++) {
    for (var j=0; j < boolarray[i].length; j++) {
        if (boolarray[i][j] == false) {
            return false;
        }
    };
}; 

return true;

答案 4 :(得分:1)

bool alltrue = true;
for (var i=0; i < boolarray.length; i++) {
              boolarray[i]
              for (var j=0; j < boolarray[i].length; j++) {
                if(boolarray[i][j] != true) {
                    alltrue = false;
                }
              };
            };     

答案 5 :(得分:1)

for(var i in boolarray)
    if(!boolarray[i]) return false;

return true;

......这是基于你的陈述:

  

boolarray = [true,true,true,true,true,true,true,true,true]

这不是一个多维数组。

答案 6 :(得分:1)

ES5表示法示例(简化):

var foo = [ [true, true, true], [true, true], [true, true], [false, true], [true, true] ];

var boolarray = foo.every(function(level2, i) {
    return level2.every(function(bool) {
        return bool;
    });
});

此示例利用Array.prototype.every返回循环函数返回的结果的事实。只要返回falsy值,迭代就会停止。

如果您需要与现有的IE6 / 7旧版浏览器保持兼容,您可以从那里下载众多ES5垫片库中的一个

答案 7 :(得分:1)

你的名为boolArray的变量是一个数组,只要它不是null,你编写的代码就会认为是真的,得到你想要的东西:

var boolArrayValue = true; // valor final a usar es boolarray value
for(var i = 0;i<boolarray.length;i++){
    for(var a = 0;a<boolarray[i].length;a++){
        boolArrayValue = boolArrayValue && boolarray[i][a];
    }
}

答案 8 :(得分:1)

boolarray = [true,true,true,true,true,true,true,true,true];
Array.prototype.isFalse=function(){
    for(var i=0;i<this.length;i++)
    {
        if(this[i]!=true) return false;
    }
    return true;
};
alert(boolarray.isFalse());​

小提琴here

答案 9 :(得分:0)

一个递归版本,用于检查任意深度的嵌套数组:

function deepEvery(arr, fn, _this) {
    return (function iterate(arr, i) {
        var len = arr && arr.length;
        if (!len || i >= len) {
            return false;
        }
        var first = arr[i] && typeof arr[i].splice === "function" 
            ? iterate(arr[i], 0) 
            : fn.call(_this || this, arr[i], i);
        i += 1;
        return !!first && (i >= len || iterate(arr, i));
    })(arr, 0);
}

用法:

deepEvery([[true, true, true], 
           [true, true, true], 
           [true, true, true]], function(el, i) {
    return el;
});

请注意,这允许在回调中进行任何类型的检查。如果您传递给deepEvery的函数返回false任何元素,则整体结果为false;否则,结果为true。例如:

deepEvery([4, true, [6, [5, "F"], 6]], function(el, i) {
    return typeof el === "number";
});

答案 10 :(得分:0)

使用 jQuery.grep() jQuery.map()

var flattenedBoolarray = $.map(boolarray, function recurs(n) {
    return ($.isArray(n) ? $.map(n, recurs): n);
});

if ($.grep(flattenedBoolarray, function(e, i){return e}, true).length) {
    // In case if any isn't true
} else {
    // In case if all are true
}

DEMO:http://jsfiddle.net/tYSu6/