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

JavaScriptでオブジェクトの配列を1つのプレーンなオブジェクトにまとめる方法

JavaScriptでは、複数のオブジェクトに分かれたプロパティを、1つのプレーンなオブジェクト(単一のオブジェクト)に統合したい場面があります。本記事では、オブジェクトの配列を受け取って、その中に含まれるすべてのプロパティを1つのオブジェクトへ集約する方法を、サンプルコードとともにわかりやすく解説します。

変換元となるデータ

例として、次のように2つのオブジェクトを持つ配列を用意します。

const arr = [{
    name: 'Dinesh Lamba',
    age: 23,
    occupation: 'Web Developer',
}, {
    address: 'Vasant Vihar',
    experience: 5,
    isEmployed: true
}];

やりたいこと

この配列を引数として受け取り、配列内のすべてのオブジェクトに存在するすべてのプロパティを1つのオブジェクトにまとめたものを返す関数を作成します。上記の配列の場合、期待される出力は次のとおりです。

const output = {
    name: 'Dinesh Lamba',
    age: 23,
    occupation: 'Web Developer',
    address: 'Vasant Vihar',
    experience: 5,
    isEmployed: true
};

実装コード

以下は、forEachメソッドとfor...inループを組み合わせたシンプルな実装例です。

const arr = [{
    name: 'Dinesh Lamba',
    age: 23,
    occupation: 'Web Developer',
}, {
    address: 'Vasant Vihar',
    experience: 5,
    isEmployed: true
}];

const mergeObjects = (arr = []) => {
    const res = {};
    arr.forEach(obj => {
        for (const key in obj) {
            res[key] = obj[key];
        }
    });
    return res;
};

console.log(mergeObjects(arr));

コードのポイント

  • まず空の結果オブジェクト res を用意します。
  • forEach で配列内の各オブジェクトを順番に処理します。
  • for...in ループで各オブジェクトのキーを1つずつ取り出し、res に代入していきます。
  • 最後に res を返すことで、すべてのプロパティを統合したオブジェクトが得られます。
補足: ループ変数は const key in obj のように宣言しましょう。let/const を付けない場合、変数がグローバルスコープに漏れてしまうため、意図しないバグの原因になります。また、複数のオブジェクトで同名のキーが存在する場合は、後から処理された値で上書きされる点にも注意してください。

出力結果

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

{
    name: 'Dinesh Lamba',
    age: 23,
    occupation: 'Web Developer',
    address: 'Vasant Vihar',
    experience: 5,
    isEmployed: true
}

別のアプローチ:Object.assignやスプレッド構文を使う

モダンなJavaScriptでは、Object.assign() やスプレッド構文(...)を使うことで、さらに簡潔に同じ処理を書くことができます。

// Object.assignを使う方法
const merged = Object.assign({}, ...arr);

// スプレッド構文を使う方法
const merged2 = {...arr[0], ...arr[1]};

console.log(merged);
console.log(merged2);

どちらの方法でも、配列内のすべてのプロパティを持つ1つのオブジェクトが生成されます。特に要素数が不定の場合は Object.assign({}, ...arr) の形式が便利です。

まとめ

オブジェクトの配列をプレーンなオブジェクトにまとめるには、forEachfor...in を使った基本的なループ処理でも十分ですが、Object.assign() やスプレッド構文を活用すれば、より短く読みやすいコードになります。用途や可読性に応じて使い分けるとよいでしょう。

  1. JavaScriptで辞書(連想配列)をオブジェクトのリストに変換する方法

    JavaScriptでは、キーと値のペアを持つ「辞書」のようなオブジェクトを、Object.values()メソッドを使うことで簡単にオブジェクトの配列(リスト)へ変換できます。以下に具体的なサンプルコードを示します。 サンプルコード <!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport content=width=device-width, initial-scale=1.0 /> <title>Document&

  2. 【JavaScript入門】複数のオブジェクトを1つにマージして単一のオブジェクト配列を作成する方法

    JavaScriptでは、Object.assign()メソッドとスプレッド構文(...)を組み合わせることで、配列内の複数のオブジェクトを1つのオブジェクトに簡単にマージすることができます。 Object.assign()は、1つ以上のコピー元オブジェクトから、コピー先のオブジェクトへすべてのプロパティをコピーするためのメソッドです。スプレッド構文を使って配列の要素を展開することで、各オブジェクトのキーと値が1つのオブジェクトに統合されます。 コード例 以下のコードは、配列内の複数のオブジェクトを単一のオブジェクトにマージする例です。 <!DOCTYPE html> <ht