【问题标题】:Loop through 2d-array diagonally对角循环遍历二维数组
【发布时间】:2019-07-28 12:34:49
【问题描述】:

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

我必须对角循环通过二维数组来检查值是否 === 0。每当我尝试这个时,它只会通过二维数组的数组然后停止

基本上我需要得到索引 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]] 返回真

[[0, 5, 6, 1], [5, 4, 1, 1], [6, 1, 5, 7], [1, 1, 1, 0]] 返回假

【问题讨论】:

    标签: javascript arrays multidimensional-array


    【解决方案1】:

    您在检查第一个值而不是检查所有值后返回 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      • 1970-01-01
      • 2021-11-03
      • 2019-02-04
      相关资源
      最近更新 更多