JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで2次元配列の転置(行と列の入れ替え)を行う方法

2次元配列の転置とは

2次元配列の「転置」とは、行と列を入れ替えた新しい配列を作る操作です。たとえば、3行2列の配列を転置すると、2行3列の配列になります。

本記事では、2次元配列を受け取り、その転置配列を返すJavaScript関数を、2つの異なるアプローチで実装する方法を紹介します。

方法1:Array.prototype.forEach() を使う方法

forEachメソッドを使って各行・各要素にアクセスし、行と列のインデックスを反転させながら結果の配列を組み立てていきます。

const arr = [
    [0, 1],
    [2, 3],
    [4, 5]
];

const transpose = arr => {
    const res = [];
    arr.forEach((el, ind) => {
        el.forEach((elm, index) => {
            res[index] = res[index] || [];
            res[index][ind] = elm;
        });
    });
    return res;
};
console.log(transpose(arr));

方法2:Array.prototype.reduce() を使う方法

reduceメソッドを使うと、アキュムレータとして結果配列を保持しながら同様の処理を、より関数型的なスタイルで記述できます。

const arr = [
    [0, 1],
    [2, 3],
    [4, 5]
];

const transpose = arr => {
    let res = [];
    res = arr.reduce((acc, val, ind) => {
        val.forEach((el, index) => {
            acc[index] = acc[index] || [];
            acc[index][ind] = el;
        });
        return acc;
    }, []);
    return res;
};

console.log(transpose(arr));

実行結果

どちらの方法でも、コンソールには以下のように出力されます。元の3行2列の配列が、2行3列の配列へと正しく変換されていることが確認できます。

[ [ 0, 2, 4 ], [ 1, 3, 5 ] ]

ポイントとなるのは res[index] = res[index] || []; の部分です。これは、該当するインデックスの行がまだ存在しない場合に空の配列で初期化するための処理で、この仕組みによって行と列の入れ替えが実現されています。

  1. JavaScriptで配列を空にする方法まとめ【3つの手法と使い分けのポイント】

    JavaScriptで配列を空にする(初期化する)方法は複数あります。それぞれの手法には特徴や注意点があり、状況に応じて適切に使い分けることが重要です。この記事では、代表的な3つの方法と、それぞれのメリット・デメリットを詳しく解説します。まず、以下のような配列があると仮定します。let arr = [1, test, {}, 123.43];方法1:新しい空の配列で置き換えるarr = [];変数arrに新しい空の配列を再代入する方法です。最もシンプルかつ高速な手法として知られています。ただし注意点として、元の配列への参照がプログラムの他の場所に存在する場合、それらの参照は自動的に更新されませ

  2. JavaScriptの基本配列メソッド解説!push・pop・shift・unshift・spliceの使い方を実例付きで紹介

    JavaScriptには、配列を操作するための便利な組み込みメソッドが数多く用意されています。その中でも特によく使われるのが、要素の追加や削除を行う以下の5つの基本メソッドです。 JavaScriptの主要な配列メソッド一覧 メソッド説明 Array.push()配列の末尾に要素を追加します。 Array.pop()配列の末尾から要素を取り除きます。 Array.unshift()配列の先頭に要素を追加します。 Array.shift()配列の先頭から要素を取り除きます。 Array.splice()配列内の任意の位置で要素の追加・削除を行います。 これらのメソッドは、配列の