次のような配列の配列があります:
[
[1,2,3],
[1,2,3],
[1,2,3],
]
これを転置して次の配列を取得したいと思います。
[
[1,1,1],
[2,2,2],
[3,3,3],
]
ループを使用してプログラム的に実行するのは難しくありません。
function transposeArray(array, arrayLength){
var newArray = [];
for(var i = 0; i < array.length; i++){
newArray.push([]);
};
for(var i = 0; i < array.length; i++){
for(var j = 0; j < arrayLength; j++){
newArray[j].push(array[i][j]);
};
};
return newArray;
}
しかし、これは面倒なようですし、もっと簡単な方法があるはずだと感じます。あるのでしょうか?
ベストアンサー1
output = array[0].map((_, colIndex) => array.map(row => row[colIndex]));
map
配列内の各要素に対して指定された関数を順番に 1 回呼び出しcallback
、その結果から新しい配列を構築します。 は、callback
値が割り当てられた配列のインデックスに対してのみ呼び出されます。削除されたインデックスや、値が割り当てられたことのないインデックスに対しては呼び出されません。
callback
要素の値、要素のインデックス、および走査される配列オブジェクトの 3 つの引数で呼び出されます。[ソース]