【问题标题】:Getting row and column values from 81-element indexed array从 81 元素索引数组中获取行和列值
【发布时间】:2023-03-17 09:26:01
【问题描述】:

我有一个包含 81 个元素的索引 JavaScript 数组。这些元素将创建 9x9 网格(类似于数独),但现在我需要找到方法,如何有效地从该数组中获取行和列值。

例如,函数getRow(2)必须返回9个值的索引数组,放在81元素数组的第二行,getColumn(2)必须类推。

目前我的getRow() 函数如下所示:

function getRow(rowId){

    // Indexes for every row in the 81-element array
    var rowIndexes = {
        1: [0,1,2,3,4,5,6,7,8],
        2: [9,10,11,12,13,14,15,16,17],
        3: [18,19,20,21,22,23,24,25,26],
        4: [27,28,29,30,31,32,33,34,35],
        5: [36,37,38,39,40,41,42,43,44],
        6: [45,46,47,48,49,50,51,52,53],
        7: [54,55,56,57,58,59,60,61,62],
        8: [63,64,65,66,67,68,69,70,71],
        9: [72,73,74,75,76,77,78,79,80]
    };

    // New array for row values
    var rowValues = new Array();

    for(var i=0; i < 9; i++){
        // Getting row value from 81-element array
        rowValues.push(GRID_ARRAY[rowIndexes[rowId][i]]);
    }

    return rowValues;

}

那么,有没有更动态、更优化的方法,如何根据指定的行/列ID同时计算行值和列值?

谢谢!

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    假设rowcolumn都在0到8之间,可以直接用公式计算指数

    index = row * 9 + column
    

    【讨论】:

    • 将它与.slice() 方法结合起来,你可以用一行代码返回一整行。 (当然,列更复杂。)
    【解决方案2】:

    对 getColumn(colId) 做同样的事情,除了

    for(var i=0; i < 9; i++){
        // Getting column value from 81-element array
        colValues.push(GRID_ARRAY[rowIndexes[i][colId]]);
    }
    return colValues;
    

    【讨论】:

      【解决方案3】:

      感谢您的帮助!所以,最后我得到了这样的解决方案:

      function getRow(row){
      
          var rowValues = [];
      
          for(var i = 9 * (row - 1); i < 9*row; i++){
              rowValues.push(GRID_ARRAY[i]);
          }
      
          return rowValues;
      
      }
      
      
      function getColumn(column){
      
          var columnValues = [];
      
          for(var i = 0; i < 9; i++){
              columnValues.push(GRID_ARRAY[i * 9 + (column - 1)]);
          }
      
          return columnValues;
      
      }
      

      【讨论】:

        猜你喜欢
        • 2021-05-13
        • 2011-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 2022-01-12
        相关资源
        最近更新 更多