オブジェクトの配列内の重複をマージし、特定のプロパティを合計するにはどうすればよいですか? [重複] 質問する

オブジェクトの配列内の重複をマージし、特定のプロパティを合計するにはどうすればよいですか? [重複] 質問する

次のオブジェクトの配列があります:

var arr = [
    {
        name: 'John',
        contributions: 2
    },
    {
        name: 'Mary',
        contributions: 4
    },
    {
        name: 'John',
        contributions: 1
    },
    {
        name: 'Mary',
        contributions: 1
    }
];

...重複部分をマージして、その寄与を合計したいとします。結果は次のようになります。

var arr = [
    {
        name: 'John',
        contributions: 3
    },
    {
        name: 'Mary',
        contributions: 5
    }
];

JavaScript でこれをどう実現できるでしょうか?

ベストアンサー1

ハッシュ テーブルを使用して、必要な合計を含む新しい配列を生成することができます。

var arr = [{ name: 'John', contributions: 2 }, { name: 'Mary', contributions: 4 }, { name: 'John', contributions: 1 }, { name: 'Mary', contributions: 1 }],
    result = [];

arr.forEach(function (a) {
    if (!this[a.name]) {
        this[a.name] = { name: a.name, contributions: 0 };
        result.push(this[a.name]);
    }
    this[a.name].contributions += a.contributions;
}, Object.create(null));

console.log(result);

おすすめ記事