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

JavaScriptで配列内の重複する値を1つにまとめて合計する方法

JavaScriptでは、重複した数値を含む配列を受け取り、同じ値をすべて1つの要素にまとめてその合計を求める関数を作成できます。たとえば、[1, 3, 1, 3]という配列が与えられた場合、値「1」は2回出現するので2、値「3」は3回出現するので9として出力します。

この処理は、reduce()メソッドとMapオブジェクトを組み合わせることで簡潔に実装できます。まず各値の出現回数をMapに記録し、その後「値 × 出現回数」を計算することで、重複分を合計した配列を生成します。

サンプルコード

const input = [1, 3, 1, 3, 5, 7, 5, 3, 4];
const sumDuplicate = arr => {
    const map = arr.reduce((acc, val) => {
        if(acc.has(val)){
            acc.set(val, acc.get(val) + 1);
        }else{
            acc.set(val, 1);
        };
        return acc;
    }, new Map());
    return Array.from(map, el => el[0] * el[1]);
};
console.log(sumDuplicate(input));

実行結果

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

[ 2, 9, 10, 7, 4 ]

コードの解説

このコードの処理の流れは次のとおりです。

1. 出現回数のカウント: reduce()を使って各要素を走査し、初期値として渡した空のMapに値をキーとして登録します。すでにキーが存在する場合はカウントを+1し、存在しない場合は1を設定します。

2. 合計値の算出: Array.from(map, ...)により、Mapの各エントリー([キー, 出現回数])を変換します。「キー(元の値)× 出現回数」を計算することで、同じ値がまとめられた合計値の配列が得られます。

入力例の場合、「1」は2回、「3」は3回、「5」は2回出現するため、結果は[1×2, 3×3, 5×2, 7×1, 4×4]、つまり[2, 9, 10, 7, 4]となります。この手法は、データの集計や統計処理など、重複データを扱う場面で幅広く活用できます。

  1. JavaScript配列から一意の値(重複なし)を取得する方法

    JavaScriptの配列に含まれる重複した値を取り除き、一意の値(ユニークな値)だけを取得したい場合は、Setオブジェクトを使うのが最もシンプルで効率的な方法です。 Setは同じ値を1つしか格納できないデータ構造のため、配列をnew Set()に渡すだけで自動的に重複が排除されます。その後、スプレッド構文([...set])を使えば、簡単に元の配列形式へ戻すことができます。 サンプルコード 以下は、JavaScriptの配列からすべての一意の値を取得する実際のコード例です。 <!DOCTYPE html> <html lang=ja> <head> <

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

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