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) の形式が便利です。
まとめ
オブジェクトの配列をプレーンなオブジェクトにまとめるには、forEach と for...in を使った基本的なループ処理でも十分ですが、Object.assign() やスプレッド構文を活用すれば、より短く読みやすいコードになります。用途や可読性に応じて使い分けるとよいでしょう。
-
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&
-
【JavaScript入門】複数のオブジェクトを1つにマージして単一のオブジェクト配列を作成する方法
JavaScriptでは、Object.assign()メソッドとスプレッド構文(...)を組み合わせることで、配列内の複数のオブジェクトを1つのオブジェクトに簡単にマージすることができます。 Object.assign()は、1つ以上のコピー元オブジェクトから、コピー先のオブジェクトへすべてのプロパティをコピーするためのメソッドです。スプレッド構文を使って配列の要素を展開することで、各オブジェクトのキーと値が1つのオブジェクトに統合されます。 コード例 以下のコードは、配列内の複数のオブジェクトを単一のオブジェクトにマージする例です。 <!DOCTYPE html> <ht