我一直在该网站上搜索问题的有效答案,到目前为止,我还没有找到答案,所以我正在发布问题
我必须沿对角线穿过2d数组,以检查值===0。每当我尝试这样做时,它只会穿过2d数组的数组,然后停止
基本上我需要获取索引0,0 1,1 2,2 ...
function isValidDistanceMatrix(nss) {
let row_count = nss.length;
let row_sizes = nss.map(ns => ns.length);
let maxRow = Math.max(...row_sizes);
let min = Math.min(...row_sizes);
if (maxRow === row_count && min === maxRow){
for (let x = 0; x < row_count; x++){
if (nss[x][x] === 0){
return true;
}
}
}
return false;
}
[[0,5,6,1],[5,0,1,1],[6,1,0,1],[1,1,1,0]]返回true
[[0,5,6,1],[5,4,1,1],[6,1,5,7],[1,1,1,0]]返回false
答案 0 :(得分:2)
在检查第一个值而不是检查所有值之后,您将返回true。
将其更改为对于任何非零值返回false,并在末尾返回true:
function isValidDistanceMatrix(nss) {
let row_count = nss.length;
let row_sizes = nss.map(ns => ns.length);
let maxRow = Math.max(...row_sizes);
let min = Math.min(...row_sizes);
if (maxRow !== row_count || min !== row_count) return false; // change to return false
for (let x = 0; x < row_count; x++) {
if (nss[x][x] !== 0) { // change to not equal
return false; // change to false on the first non-zero
}
}
return true; // change to return true after all values are checked
}
或者,可以使用Array.prototype.every()
method(未测试)进行简化:
const isValidDistanceMatrix = nss =>
nss.every((row, index) => row.length === nss.length && row[index] === 0);