JavaScriptでオブジェクトの配列に含まれる共通キーの値を合計する方法
この記事では、オブジェクトの配列に含まれる各キーの値を合計し、1つのオブジェクトとしてまとめる方法を解説します。
問題の概要
まず、次のようなオブジェクトの配列を想定してみましょう。
const arr = [{a: 2, b: 5, c: 6}, {a:3, b: 4, d:1},{a: 1, d: 2}];ここでのポイントは以下の通りです。
- それぞれのオブジェクト内部では、キーは必ず一意である必要があります(有効なオブジェクトであるためには)。
- しかし、異なるオブジェクト同士は同じキーを持つことができます。
今回求められているのは、こうした配列を受け取り、配列内に出現するすべての一意なキーをプロパティとし、その値として各キーに対応する数値の累積合計を持つオブジェクトを返すJavaScript関数を作成することです。
期待される出力
上記の配列の場合、結果として得られるオブジェクトは次のようになります。
const output = {a: 6, b: 9, c: 6, d: 3};実装コード
それでは、実際のコードを見てみましょう。forループで各オブジェクトを順番に処理し、Object.keys()で取得したキーごとに値を加算していくシンプルなアプローチです。
const arr = [{a: 2, b: 5, c: 6}, {a: 3, b: 4, d:1}, {a: 1, d: 2}];
const sumArray = arr => {
const res = {};
for(let i = 0; i < arr.length; i++){
Object.keys(arr[i]).forEach(key => {
res[key] = (res[key] || 0) + arr[i][key];
});
};
return res;
};
console.log(sumArray(arr));コードのポイント
この実装で重要なのは、res[key] = (res[key] || 0) + arr[i][key] の部分です。res[key]がまだ存在しない場合(undefinedの場合)、0を初期値として扱うことで、初回の出現時にも正しく加算できるようになっています。これはJavaScriptで頻出するイディオム的な書き方なので覚えておくと便利です。
実行結果
このコードをコンソールで実行すると、以下のような出力が得られます。
{ a: 6, b: 9, c: 6, d: 3 }各キー(a、b、c、d)ごとに、配列内の全オブジェクトから対応する値が正しく合計されていることが確認できます。
-
JavaScriptのオブジェクト配列に配列メソッドを適用する方法
JavaScriptでは、オブジェクトが格納された配列に対しても、通常の配列と同じようにpop()、push()、splice()などの標準的な配列メソッドをそのまま使用できます。オブジェクト配列はあくまで「配列」であるため、要素としてオブジェクトが入っていても配列操作のAPIは共通で動作します。 コード例 以下は、JavaScriptオブジェクトの配列に対して配列メソッドを使用するサンプルコードです。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8
-
JavaScriptでnull・空のオブジェクトを含む配列に値を割り当てる方法
JavaScriptでは、forEach()メソッドとObject.keys()メソッドを組み合わせることで、nullや空のオブジェクトを含む配列に対して効率的に値を割り当てることができます。本記事では、実際のコード例を交えながら、その具体的な実装方法をわかりやすく解説します。 サンプルコード 以下は、JavaScriptを使用してnull/空のオブジェクトを持つ配列に値を割り当てるコード例です。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&qu