检查嵌套数组中的每个值是真还是假的更好方法?

ano*_*ran 5 javascript arrays multidimensional-array ecmascript-5 ecmascript-6

我有一个这样的嵌套数组。

var arr = [[false,false,false,false],[false,false,false,false],[false,false,false,false],[false,false,false,false]]
Run Code Online (Sandbox Code Playgroud)

我想检查每个值是否为假。我可以想到一种方法来做到这一点。

let sum = 0;
arr.forEach((row, i) => {
    row.forEach((col, j) => {
      sum = sum +arr[i][j]    
    });
});
if(sum === 0){
    console.log("all values false")
}
Run Code Online (Sandbox Code Playgroud)

这有效。但我很好奇是否有更好的方法?检查所有值是否为真或假?

Mah*_*Ali 8

您可以使用嵌套 every()

var arr = [[false,false,false,false],[false,false,false,false],[false,false,false,false],[false,false,false,false]]
const res = arr.every(x => x.every(a => a === false));
console.log(res)
Run Code Online (Sandbox Code Playgroud)

为了使代码更简洁,您可以先flat()使用every()

var arr = [[false,false,false,false],[false,false,false,false],[false,false,false,false],[false,false,false,false]]
const res = arr.flat().every(x => x === false)
console.log(res)
Run Code Online (Sandbox Code Playgroud)

我正在考虑您只想检查false. 如果您想检查所有虚假值(null, undefined等)。您可以使用!而不是与false

const res = arr.every(x => x.every(a => !a));
Run Code Online (Sandbox Code Playgroud)


Nin*_*olz 5

您可以使用两个嵌套的Array#some,因为如果您找到一个true值,迭代就会停止。然后取负值。

var array = [[false, false, false, false], [false, false, false, false], [false, false, false, false], [false, false, false, false]],
    result = !array.some(a => a.some(Boolean));

console.log(result);
Run Code Online (Sandbox Code Playgroud)