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

JavaScriptでオブジェクト配列の各キーの合計値を計算する方法

例えば、複数のスポーツにおけるプレイヤーのスコアを格納した配列があるとします。スコアは次のようなオブジェクトの配列として表されます。

const scores = [
    {sport: 'cricket', aman: 54, vishal: 65, jay: 43, hardik: 88, karan:23},
    {sport: 'soccer', aman: 14, vishal: 75, jay: 41, hardik: 13, karan:73},
    {sport: 'hockey', aman: 43, vishal: 35, jay: 53, hardik: 43, karan:29},
    {sport: 'volleyball', aman: 76, vishal: 22, jay: 36, hardik: 24, karan:47},
    {sport: 'baseball', aman: 87, vishal: 57, jay: 48, hardik: 69, karan:37},
];

この配列を引数として受け取り、sport キーに「all」という値を持つ単一のオブジェクトを返す関数を作成する必要があります。その他の各プレイヤーのキーには、配列内の各オブジェクトに含まれる値の合計が格納されるようにします。

それでは、この関数のコードを書いていきましょう。

ここでは、Array.prototype.reduce() メソッドを使用して、全プレイヤーの各スポーツにおけるスコアの合計を集約します。コードは以下の通りです。

サンプルコード

const scores = [
    {sport: 'cricket', aman: 54, vishal: 65, jay: 43, hardik: 88, karan:23},
    {sport: 'soccer', aman: 14, vishal: 75, jay: 41, hardik: 13, karan:73},
    {sport: 'hockey', aman: 43, vishal: 35, jay: 53, hardik: 43, karan:29},
    {sport: 'volleyball', aman: 76, vishal: 22, jay: 36, hardik: 24, karan:47},
    {sport: 'baseball', aman: 87, vishal: 57, jay: 48, hardik: 69, karan:37},
];
const sumScores = (arr) => {
    return arr.reduce((acc, val) => {
        Object.keys(val).forEach(key => {
            if(key !== 'sport'){
                acc[key] += val[key];
            };
        });
        if(acc['sport'] !== 'all'){
            acc['sport'] = 'all';
        };
        return acc;
    });
};
console.log(sumScores(scores));

このコードでは、reduce() のコールバック関数内で Object.keys() を使って各オブジェクトのキーを走査し、「sport」キー以外の値を累積オブジェクトに加算しています。「sport」キーは集計対象外とし、代わりに「all」という固定値を設定することで、合計結果であることを明示しています。

実行結果

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

{
    sport: 'all',
    aman: 274,
    vishal: 254,
    jay: 221,
    hardik: 237,
    karan: 209
}

このように、reduce() メソッドを活用すれば、動的な構造を持つオブジェクト配列でも、キーごとの合計値をシンプルかつ効率的に集計できます。

  1. 【JavaScript】配列内のネストされたオブジェクトの値を合計する方法

    この記事では、JavaScriptを使って、配列内にネストされた(入れ子構造の)オブジェクトの値を合計する方法を解説します。サンプルコードでは、JSONデータの複数階層に格納された数値(costNum)を順番に取り出し、その合計をブラウザ上に表示します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=d

  2. JavaScriptでネストされた配列の加重和を計算する方法

    ```html 問題 任意の深さまでネストされた配列 arr を唯一の引数として受け取り、その加重和(weighted sum)を計算して返す JavaScript 関数を作成する必要があります。 加重和とは、各要素に「その要素が属するネストの深さ(レベル)」を掛けた値を、配列全体にわたって合計したものです。 入力例と出力例 たとえば、関数に次の配列を渡した場合を考えてみましょう。 const arr = [4, 7, [6, 1, [5, 2]]]; このとき、期待される出力は次のとおりです。 const output = 46; なぜ 46 になるのか? 最上位の要素はレベル1、その中