我有一个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是否都是真的?
答案 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一样简单......
答案 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
}