JavaScriptで配列内の重複した値を合計して一意化する方法
本記事では、重複する要素を含む数値の配列を受け取り、同じ値を持つ要素をすべて合計して1つの要素にまとめるJavaScript関数の作成方法を解説します。
例えば、入力配列が次のようになっているとします。
const input = [1, 3, 1, 3, 5, 7, 5, 4];
この場合、期待される出力は次のとおりです。
const output = [2, 6, 10, 7, 4];
つまり、重複している「1」は合計されて先頭のインデックスに配置され、重複している「3」はその次のインデックスに、というように処理されます。出力配列では、各一意の値が「値 × 出現回数」という形で1つずつ並ぶことになります。
サンプルコード
以下がその実装例です。
const input = [1, 3, 1, 3, 5, 7, 5, 4];
const mergeDuplicates = 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(mergeDuplicates(input));
実行結果
コンソールには次のような出力が表示されます。
[ 2, 6, 10, 7, 4 ]
コードの仕組み
この関数は、まずreduce()メソッドを使って配列を走査し、各値の出現回数をMapオブジェクトに記録します。マップのキーには配列の値、バリューには出現回数が格納されます。
Mapは挿入順序を保持するため、一意の値は元の配列で最初に出現した順番どおりに並びます。最後にArray.from()でMapを配列へ変換し、各エントリに対して「キー(値)× バリュー(出現回数)」を計算することで、重複が合計された新しい配列を生成しています。
このアプローチなら、配列を一度走査するだけで済むため効率的であり、任意の数値配列に対して柔軟に対応できます。
-
JavaScript配列から一意の値(重複なし)を取得する方法
JavaScriptの配列に含まれる重複した値を取り除き、一意の値(ユニークな値)だけを取得したい場合は、Setオブジェクトを使うのが最もシンプルで効率的な方法です。 Setは同じ値を1つしか格納できないデータ構造のため、配列をnew Set()に渡すだけで自動的に重複が排除されます。その後、スプレッド構文([...set])を使えば、簡単に元の配列形式へ戻すことができます。 サンプルコード 以下は、JavaScriptの配列からすべての一意の値を取得する実際のコード例です。 <!DOCTYPE html> <html lang=ja> <head> <
-
JavaScript(D3.js)を使ってWebページのpタグに配列のすべての値を表示する方法
配列のすべての値をpタグで表示する方法JavaScriptで配列のすべての値をWebページ上のpタグとして表示したい場合は、D3.jsの .data(anyArrayObject) メソッドを利用するのが便利です。D3.jsはデータとDOM要素を結びつける(データバインディング)ためのライブラリで、data() で配列を渡し、enter() で要素を追加することで、配列の要素数に応じたpタグを自動的に生成できます。以下に具体的なコード例を示します。コード例<!DOCTYPE html> <html lang=ja> <head> <meta chars