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

JavaScriptでネストされた複数の配列を1つの配列にまとめる方法

JavaScriptでは、配列の中にさらに配列が入った「ネストされた配列」を扱うことがあります。たとえば、次のようなデータ構造を考えてみましょう。

const arr = [
    [{"c": 1},{"d": 2}],
    [{"c": 2},{"d": 3}]
];

ここで必要となるのは、このような配列を第1引数(唯一の引数)として受け取るJavaScript関数の作成です。

作成する関数は、元の配列を直接変更せずに新しい配列を生成し、ネストされた配列を取り除いたうえで、オブジェクトだけをフラット(平坦)に並べた1つの配列へと変換します。

つまり、最終的な出力は次のようになります。

const output = [{"c": 1},{"d": 2},{"c": 2},{"d": 3}];

実装例

まずは、forEach()を使った基本的な実装方法を見てみましょう。外側と内側の配列を順番に走査し、要素を結果用の配列へ追加していくシンプルなアプローチです。

const arr = [
    [{"c": 1},{"d": 2}],
    [{"c": 2},{"d": 3}]
];
const simplifyArray = (arr = []) => {
    const res = [];
    arr.forEach(element => {
        element.forEach(el => {
            res.push(el);
        });
    });
    return res;
};
console.log(simplifyArray(arr));

実行結果

コンソールには次のように出力されます。

[ { c: 1 }, { d: 2 }, { c: 2 }, { d: 3 } ]

より簡潔な方法:Array.prototype.flat()

ES2019以降の環境では、flat()メソッドを使うことで、同じ処理をわずか1行で実現できます。

const output = arr.flat();
console.log(output); // [ { c: 1 }, { d: 2 }, { c: 2 }, { d: 3 } ]

デフォルトでは1階層分しか平坦化されませんが、深くネストされた配列に対してはarr.flat(Infinity)と指定すれば、すべての階層を一度に展開できます。

そのほかにも、flatMap()reduce()concat()を組み合わせる方法など、さまざまなアプローチがあります。コードの可読性や対応ブラウザの範囲などを考慮して、プロジェクトに適した方法を選ぶとよいでしょう。

  1. 複数の値でJavaScript配列の要素を検索する方法

    JavaScriptである配列(arr)が、別の配列(arr1)の複数の値・すべての要素を含んでいるかどうかを確認したい場面はよくあります。そんなときは、every()メソッドとincludes()メソッドを組み合わせることで、シンプルに判定できます。以下はそのサンプルコードです。 コード例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content=

  2. JavaScriptの配列を文字列に変換する方法【toString()の使い方を解説】

    JavaScriptで配列の要素をひとつの文字列として扱いたい場面はよくあります。そんなときに便利なのがtoString()メソッドです。このメソッドを使うと、配列の各要素がカンマ(,)で区切られたひとつの文字列に変換されます。以下は、ボタンをクリックすると配列の中身が文字列として画面に表示されるシンプルなサンプルコードです。サンプルコード<!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport content=width=device-