const array2D = [ [1,2,3], [4,5,6], [7,8,9], [10,11,12] ]
function transpose(array2D) {
return array2D[0].map(function (_, i) { ①
return array2D.map(function (el) { ②
return el[i]; ③
});
});
}
①// mapメソッドの第1引数(_)は処理中の要素array2D[0]、つまり[1,2,3]
// 第2引数(i)はインデックス番号を表す、mapメソッドは各要素に対して1度ずつ実行する
// したがって、繰り返し処理のようにi=0,i=1,i=2が代入されていく
// 本来第2引数は省略可能だが、今回iが書いてあるのは最後のel[i]でiを使用するため
// array2D[0]にmapメソッドを適用しているのは、1次配列の要素数だけ繰り返すためである
// array2D[0]自体に意味はなく、要素数が3つの配列であればなんでもいい
// 上記の理由で、例えばarray2D[0]とarray2D[1]の要素数が違えばこの関数は使えない
②// elはarray2Dの要素、つまり[[1,2,3],[4,5,6],[7,8,9]]
③// iが0だったのでまずはel[0]、2次元配列の要素が"一つずつ"入る
// [1,2,3][0]=>1, [4,5,6]=>4, [7,8,9]=>7 これが配列になるので[1,4,7]がまずできる
console.log(transpose(array2D));
const array2D = [ [1,5,9], [2,6,10], [3,7,11], [4,8,12] ]