2017-10-29 8 views
0

比較的新しいJSです。配列の配列を取り、その列を配列に変換するこのコードを理解しようとしています。Javascript - 列を列に変換する

grid= 
[[".",".",".","1","4",".",".","2","."], 
[".",".","6",".",".",".",".",".","."], 
[".",".",".",".",".",".",".",".","."], 
[".",".","1",".",".",".",".",".","."], 
[".","6","7",".",".",".",".",".","9"], 
[".",".",".",".",".",".","8","1","."], 
[".","3",".",".",".",".",".",".","6"], 
[".",".",".",".",".","7",".",".","."], 
[".",".",".","5",".",".",".","7","."]] 

//Turn columns into rows 
var transpose = grid => 
    grid[0].map(
     (_,c) => grid.map(
      row => row[c] 
     ) 
    ) 

これは通常の機能を使ってどのように見えますか?

+0

あなたは「通常の」機能とはどういう意味ですか? – Xufox

+1

結果として必要なものについての説明を追加します。 –

+0

"for"ループを使用していますか? –

答えて

1
var transpose = grid =>  // defining `transpose` as function with parameter `grid`, returning the following expression 
    grid[0].map(   // return values from first row mapped via following function 
     (_,c) => grid.map( // using second parameter which is an index to do column mapping 
      row => row[c] // returning the value with index of row but from column 
     ) 
    ) 

は、だから、このES6 map機能せず、それは2サイクルのために入れ子にすることになります。

var grid = 
 
    [[".",".",".","1","4",".",".","2","."], 
 
    [".",".","6",".",".",".",".",".","."], 
 
    [".",".",".",".",".",".",".",".","."], 
 
    [".",".","1",".",".",".",".",".","."], 
 
    [".","6","7",".",".",".",".",".","9"], 
 
    [".",".",".",".",".",".","8","1","."], 
 
    [".","3",".",".",".",".",".",".","6"], 
 
    [".",".",".",".",".","7",".",".","."], 
 
    [".",".",".","5",".",".",".","7","."]]; 
 

 
function transpose(grid) { 
 
    var ret = []; 
 
    for (var i = 0; i < grid[0].length; i++) { 
 
     ret[i] = []; 
 
     for (var j = 0; j < grid.length; j++) { 
 
      ret[i][j] = grid[j][i]; 
 
     } 
 
    } 
 

 
    return ret; 
 
} 
 

 
// use map for pretty printing the matrix 
 
console.log(grid.map(row => row.join(' '))); 
 
console.log(transpose(grid).map(row => row.join(' ')));

+0

ありがとう、非常に正確かつ明確な応答..専門知識を高く評価し、非常に助けてください。 –

関連する問題