对角遍历2D阵列

时间:2019-07-28 12:34:49

标签: javascript arrays multidimensional-array

我一直在该网站上搜索问题的有效答案,到目前为止,我还没有找到答案,所以我正在发布问题

我必须沿对角线穿过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

1 个答案:

答案 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);