2013-05-07 2 views
0

У меня есть индексный массив JavaScript, который содержит ровно 81 элемент. Эти элементы создадут сетку 9x9 (подобно Sudoku), но теперь мне нужно найти способ, как эффективно получить значения строк и столбцов из этого массива.Получение значений строк и столбцов из 81-элементного индексированного массива

Например, функция 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

Спасибо за вашу помощь! Итак, наконец, я получил такое решение:

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; 

} 
1

Предполагая row и column оба от 0 до 8, можно вычислить индекс непосредственно по формуле

index = row * 9 + column 
+1

Объединить это с методом '.slice()' и вы можете вернуть целую строку с одной строкой кода. (Конечно, столбцы сложнее). – nnnnnn

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; 
Смежные вопросы