🟨JavaScript

JavaScriptで配列の重複を削除する方法(Set)

JavaScriptで配列から重複する要素を取り除きたいとき、Setを使えば一行で書けます。昔は手間がかかった処理も、今はとてもシンプル。コピペで使える基本形と仕組みを押さえましょう。

const arr = [1, 2, 2, 3, 3, 3];
const unique = [...new Set(arr)];
// 結果: [1, 2, 3]
要素役割
new Set(arr)重複を除いた集合を作る
[... ]集合を配列に戻す(スプレッド)

仕組みを理解する

Setは「重複を許さない集合」です。

Setで重複が消える
Setは同じ値を1つしか持てないデータ構造。配列をSetに入れると、自動的に重複が取り除かれます。
配列に戻す
Setのままでは配列の操作ができないので、スプレッド構文 [...] で配列に戻します。これで重複なしの配列が完成します。
コツ:この[...new Set(arr)]が、重複削除の定番イディオムです。短く読みやすいので、数値や文字列の配列ならこれが一番手軽。覚えておくと便利です。

注意点と応用

使える場面と限界を知っておきます。

  • プリミティブ向き…数値・文字列の重複削除に最適。
  • オブジェクト配列は不可…オブジェクトは中身が同じでも別物扱いになる。
  • 順序は保たれる…Setは挿入順を保つので、元の並び順が維持される。
注意:Setはオブジェクトの配列では重複を判定できません。中身が同じオブジェクトでも別のものとして扱われるためです。オブジェクト配列の重複削除には、特定のキーで判定するなど別の方法が必要です。

あわせて読みたい:JavaScriptで日付を「YYYY-MM-DD」形式にする方法Pythonで辞書を値(value)でソートする方法JavaScriptの記事一覧

まとめ

JavaScriptの配列重複削除は[...new Set(arr)]が定番。Setが重複を取り除き、スプレッド構文で配列に戻します。数値や文字列の配列に最適で、順序も保たれます。ただしオブジェクトの配列では中身で判定できないため、別の方法が必要です。

よくある質問

JavaScriptで配列の重複を削除するには?
Setを使い [...new Set(arr)] と書くのが定番です。Setが重複を取り除き、スプレッド構文 [...] で配列に戻します。数値や文字列の配列に最適です。
なぜSetで重複が消えるの?
Setは同じ値を1つしか持てない「集合」だからです。配列をSetに入れると自動的に重複が取り除かれ、スプレッド構文で配列に戻せます。
元の順序は保たれる?
保たれます。Setは挿入順を保持するため、[...new Set(arr)] で重複を削除しても、元の配列の並び順が維持されます。
オブジェクトの配列でも使える?
そのままでは使えません。Setは中身が同じオブジェクトでも別物として扱うためです。特定のキーで判定するなど、別の方法で重複削除する必要があります。