2017-09-18 6 views
0

逆に、私はあなたに入力座標のインデックスを与える関数を持っています。多次元配列への座標のインデックスが与えられたら、それらの座標はどのように計算できますか?

function generateBoard(rows, cols, initialValue) { 
let arr = []; 
for(var i = 0; i < rows;i++){ 
    arr.push(new Array(cols).fill(initialValue)) 
} 
return arr; 
} 

が与えられた場合:

const board = generateBoard(3,3," "); 

それはのような配列を生成しなければなりません[ " """、 ""]、[ ""、 ""、 ""]、[ "" 、「」、「」]、例えば2,1は7

をプリントアウトすべき座標をどのように書くことができます。indexToRowColのサンプル入力(ボードは、8)あなたを与える必要があります

function indexToRowCol(board, i){} 

場合コーディナ行= xとcols = xのテス?私は単純にインデックスパラメータによって行と列の値を計算する方法がわかりません。

+0

なぜ、 '2,1をプリントアウトするのですか?' 'あなたはそれを" "に初期化します。 –

+0

@just_a_simple_guy 1行で読み込むと、2,1が配列の7番目の要素になるためです。 –

答えて

1

行番号は、ボード[0] .lengthで除算します。これは、各行に分散し、その値の階数を取る必要がある要素の数です。最後の行の残りの要素を見つける必要があるためです。

row = parseInt(i/board[0].length)column = i - row*board[0].length -1

function generateBoard(rows, cols, initialValue) { 
 
let arr = []; 
 
for(var i = 0; i < rows;i++){ 
 
arr.push(new Array(cols).fill(initialValue)) 
 
} 
 
return arr; 
 
} 
 

 
const board = generateBoard(3,3," "); 
 

 
function indexToRowCol(board, i){ 
 
var row = parseInt(i/board[0].length); 
 
var column = i - row*board[0].length - 1; 
 

 
console.log(row); 
 
console.log(column); 
 
} 
 

 
indexToRowCol(board, 8)

1
function indexToRowCol(board, i){ 
    var row = parseInt(i/board[0].length); 
    var col = i%board[0].length -1; 
    return board[row][col]; 
} 
0

のTh実際に私のために働いています。

function indexToRowCol(board, i){ 
    var row = Math.floor((i/board.length)); 
    var col = (i - (row*(board.length))); 

    return [row,col]; 
} 

他の回答のいくつかでは負の整数が返されていましたが、これはそのように思われます。

+0

'col'に' - 1'を付けるか、間違った値を返します。 –

関連する問題