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

JavaScriptでオブジェクトのコレクションを集約・マージする最良の方法とは?

はじめに

JavaScriptで重複するデータを含むオブジェクトの配列を、1つにまとめて集約したい場面はよくあります。そのような場合に最も効果的なのが、Object.values()reduce()を組み合わせる方法です。

この記事では、学生IDごとに点数を合計してマージする具体例を通じて、実装方法をわかりやすく解説します。

対象となるデータ

今回は以下のようなオブジェクト配列を例にします。同じstudentIdを持つエントリが複数存在しているのがポイントです。

var details = [
    { studentId: 10, marks: 75, studentName: "John" },
    { studentId: 10, marks: 75, studentName: "John" },
    { studentId: 11, marks: 98, studentName: "Bob" }
];

reduce()とObject.values()による集約のコード

reduce()を使ってstudentIdをキーとした中間オブジェクトを作成し、既存のキーがあればmarksの値を加算します。最後にObject.values()で配列形式に変換することで、重複のないマージ済みデータが得られます。

var details = [
    { studentId: 10, marks: 75, studentName: "John" },
    { studentId: 10, marks: 75, studentName: "John" },
    { studentId: 11, marks: 98, studentName: "Bob" }
];
output = Object.values(details.reduce((value, object) => {
    if (value[object.studentId]) {
        ['marks'].forEach(key => value[object.studentId][key] = value[object.studentId][key] + object[key]);
        } else {
            value[object.studentId] = { ...object };
    }
    return value;
}, {}));
console.log(output);

プログラムの実行方法

上記のプログラムを実行するには、Node.jsを使って以下のコマンドを入力します。ここではファイル名をdemo237.jsとして保存しています。

node demo237.js

実行結果

実行すると、同じstudentIdを持つオブジェクトが1つに統合され、marksの値が合計されていることが確認できます。

PS C:\Users\Amit\javascript-code> node demo237.js
[
    { studentId: 10, marks: 150, studentName: 'John' },
    { studentId: 11, marks: 98, studentName: 'Bob' }
]

コードの解説

  • reduce()の初期値: 空のオブジェクト{}を初期値とし、studentIdをキーとして各オブジェクトを格納していきます。
  • 重複チェック: value[object.studentId]がすでに存在する場合は、marksプロパティの値を加算して合計を求めます。
  • 新規登録: 存在しない場合は、スプレッド構文{ ...object }を使ってオブジェクトのコピーを作成し、新しく登録します。
  • 配列への変換: 最後にObject.values()を適用することで、キー付きオブジェクトから値(オブジェクト)だけを取り出した配列を生成します。

まとめ

reduce()でグループ化を行い、Object.values()で結果を配列化する手法は、オブジェクトのコレクションを効率的に集約できる強力なパターンです。forEach内の配列['marks']に対象のキー名を追加すれば、点数以外の数値項目も同時に合計できるため、柔軟に応用できます。データの重複除去や集計処理が必要な際は、ぜひこの方法を活用してみてください。

  1. JavaScriptでイベントを追加する最良の方法とは?addEventListener()の使い方を徹底解説

    任意の要素にイベントを追加する最良の方法は、addEventListener()メソッドを使用することです。このメソッドは、指定した要素に対してイベントリスナー(イベント発生時に実行される処理)を登録します。従来のonclick属性と異なり、1つの要素に複数のイベントハンドラを追加できるため、現代のWeb開発では標準的な手法とされています。 addEventListener()メソッドの基本構文 element.addEventListener(event, function, useCapture); event: 監視したいイベントの種類(例: 「click」「mouseover」「ke

  2. JavaScriptで新しいブラウザウィンドウを開く最良の方法とは?window.open()の使い方を解説

    JavaScriptで新しいブラウザウィンドウを開くには、windowオブジェクトのopen()メソッドを使うのが最も標準的で確実な方法です。 window.open()メソッドは、指定したURLを新しいウィンドウ(またはタブ)で開きます。第2引数でウィンドウ名、第3引数でサイズや位置などの表示特性を指定することも可能です。 window.open()の基本構文 window.open(URL, name, features); URL: 開きたいページのアドレス(必須) name: ウィンドウの名前またはターゲット属性(例: _blank)(省略可) features: ウィンドウの幅・高