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

ネストされた配列のデータをJavaScriptオブジェクトに変換する方法

課題

まず、次のように「配列の中に配列が入った」ネストされたデータ構造があると仮定しましょう。

const arr = [
    [
        ['dog', 'Harry'], ['age', 2]
    ],
    [
        ['dog', 'Roger'], ['age', 5]
    ]
];

ここで求められているのは、このようなネストされた配列を受け取り、その内容をもとにオブジェクトの配列を作成するJavaScript関数を実装することです。

上記の配列に対して関数を実行した場合、期待される出力は以下のとおりです。

const output = [
    { dog: 'Harry', age: 2 },
    { dog: 'Roger', age: 5 }
];

実装例

実際のコードは次のようになります。

const arr = [
    [
        ['dog', 'Harry'], ['age', 2]
    ],
    [
        ['dog', 'Roger'], ['age', 5]
    ]
];

const prepareObjectArray = (arr = []) => {
    const copy = arr.slice();
    copy.forEach((el, ind, array) => {
        el.forEach((element, index, subArray) => {
            subArray[element[0]] = element[1];
        });
        el.length = 0;
        array[ind] = Object.assign({}, array[ind]);
    });
    return copy;
};

console.log(prepareObjectArray(arr));

出力

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

[ { dog: 'Harry', age: 2 }, { dog: 'Roger', age: 5 } ]

コードの解説

この関数の処理の流れは以下のとおりです。

  1. arr.slice() で元の配列のコピーを作成し、元のデータを破壊しないようにしています。
  2. 外側の forEach で犬ごとのグループを走査し、内側の forEach[キー, 値] のペアを配列自身のプロパティとして動的に設定しています。
  3. el.length = 0 によって配列の要素をすべて取り除いた後、Object.assign() を使って配列をプレーンなオブジェクトへ変換しています。

よりシンプルな代替手法:Object.fromEntries()

ES2019以降で利用できる Object.fromEntries() を使うと、同じ処理をはるかに簡潔に記述できます。

const prepareObjectArray = (arr = []) =>
    arr.map(pairs => Object.fromEntries(pairs));

console.log(prepareObjectArray(arr));
// [ { dog: 'Harry', age: 2 }, { dog: 'Roger', age: 5 } ]

各サブ配列が [キー, 値] 形式のペアを持っているため、そのまま Object.fromEntries() に渡すだけで自動的にオブジェクトへ変換されます。モダンなJavaScript環境では、こちらの方法を採用するのがおすすめです。

  1. 【JavaScript】配列内のネストされたオブジェクトの値を合計する方法

    この記事では、JavaScriptを使って、配列内にネストされた(入れ子構造の)オブジェクトの値を合計する方法を解説します。サンプルコードでは、JSONデータの複数階層に格納された数値(costNum)を順番に取り出し、その合計をブラウザ上に表示します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=d

  2. JavaScriptでオブジェクトを新しい配列に変換する方法

    JavaScriptでは、オブジェクトのプロパティやネストされたデータを取り出し、扱いやすい形で新しい配列にフォーマットできます。本記事では、学校(school)オブジェクトに含まれる生徒情報を、文字列形式の配列へ変換する実践的なコード例を紹介します。 ポイントとなるテクニック このサンプルでは、以下の2つのJavaScript機能を活用しています。 分割代入(Destructuring assignment):オブジェクトから特定のプロパティを簡潔に取り出す構文です。 for...of ループ:配列内の各要素を順番に処理するために使用します。 コード例 <!DOCTYPE html