我有一个索引的JavaScript数组,其中包含81个元素。这些元素将创建9x9网格(类似于Sudoku),但是现在我需要找到方法,如何有效地从该数组中获取行和列值。
例如,函数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计算行和列值?
谢谢!
答案 0 :(得分:1)
假设row
和column
都在0到8之间,您可以直接使用公式计算索引
index = row * 9 + column
答案 1 :(得分:0)
为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;
答案 2 :(得分:0)
感谢您的帮助!所以,最后我得到了这样的解决方案:
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;
}