9

我有一个多维的布尔数组,每个元素都设置为 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 是否全部正确的任何想法?

4

11 回答 11

29

使用.every()...

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

boolarray.every(Boolean);

演示:http: //jsfiddle.net/gFX7X/


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

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

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

演示:http: //jsfiddle.net/gFX7X/1/


或者是前一个版本的稍短版本:

boolarray.every(Function.call.bind(Boolean, null))
于 2012-04-10T22:17:29.537 回答
3

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

000 000 001

==

1个十进制

111 111 111

==

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

将棋盘位置设置为真或假将变得有点操作,测试将变得像 parseInt = 511 一样简单......

在 javascript 中查看位操作

于 2012-04-10T22:16:09.123 回答
1

编写一个在给定参数(我们的二维数组)上运行循环的函数,并检查每个单元格是否为真。如果不是,则返回 false。循环结束后,返回true;

于 2012-04-10T22:08:10.637 回答
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;
于 2012-04-10T22:08:40.750 回答
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;
                }
              };
            };     
于 2012-04-10T22:08:49.720 回答
1
for(var i in boolarray)
    if(!boolarray[i]) return false;

return true;

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

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

这不是多维数组。

于 2012-04-10T22:09:36.413 回答
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 shim 库之一

于 2012-04-10T22:12:25.517 回答
1

您的名为 boolArray 的变量是一个数组,只要它不为空,您编写的代码就会将其设置为 true,以获得您想要的东西,您需要这样的东西:

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];
    }
}
于 2012-04-10T22:13:32.383 回答
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());​

这里有一个小提琴。

于 2012-04-10T22:16:33.520 回答
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";
});
于 2014-01-23T21:48:46.590 回答
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
}

演示:http: //jsfiddle.net/tYSu6/

于 2014-07-22T14:32:55.750 回答