JavaScriptで配列の重複を削除する最短コード|Setとfilterの使い分け

JavaScript プログラミング アルゴリズム
結論

現代のJavaScriptなら [...new Set(array)] が最短かつ最速。

重複削除の3つの手法

1. Setを使う(推奨)

もっともシンプルで読みやすい方法です。Set オブジェクトは重複する値を保持できない性質を利用します。

const array = [1, 2, 2, 3, 1];
const unique = [...new Set(array)]; // [1, 2, 3]

2. filterを使う

古い環境や、より複雑な条件(オブジェクトの重複など)を扱いたい場合に便利です。

const unique = array.filter((value, index, self) => self.indexOf(value) === index);

3. lodashのuniqを使う

大規模なプロジェクトで既に lodash を導入しているなら、_.uniq(array) を使うのが安全です。

🧹 この場で重複を削除する

パフォーマンスの比較

データ量が数万件を超える場合、filter + indexOf は計算量が $O(n^2)$ になるため非常に遅くなります。一方、Set はハッシュマップ的な内部構造を持つため $O(n)$ に近く、大規模データでも高速に動作します。基本的には Set を使いましょう。

関連記事

あわせて読むと理解が深まる関連記事をまとめました。

トピック記事
重複行の削除重複行の削除|dedupeの使い方の使い方と注意点まとめ実務ガイド開発者向け実践ガイド実践2実践3実践4実践5実践6
Web Vitals INP改善ガイドWeb Vitals INP改善ガイド|scheduler.yield・Long Task・Input Delay対策(2026)
CSS JS Minify 圧縮CSS JS Minify 圧縮|本番向けファイルサイズ削減
JS Minify と難読化の違いJS Minify と難読化の違い|本番 JS 最適化
Subresource Integrity (SRI) 完全ガイドSubresource Integrity (SRI) 完全ガイド|CDN スクリプトの integrity・crossorigin・フォールバック
1フレームは何秒・何ms? 60fpsと120fpsの計算方法1フレームは何秒・何ms? 60fpsと120fpsの計算方法
AIクローラー対応 robots.txt・llms.txt 設定ガイド 2026AIクローラー対応 robots.txt・llms.txt 設定ガイド 2026|GPTBot・ClaudeBot・Google-Extended・GEO戦略
APIキャッシュ設計ガイドAPIキャッシュ設計ガイド|ETag・Cache-Control・304・CDNキャッシュキーの実務
Web APIのエラーハンドリング設計Web APIのエラーハンドリング設計|RFC 9457・error_code・400/422/409の使い分け
Web APIのべき等性(Idempotency)設計Web APIのべき等性(Idempotency)設計|二重決済を防ぐ実装ガイド
API設計におけるページネーションの使い分け:オフセット型とカーソル型の比較API設計におけるページネーションの使い分け:オフセット型とカーソル型の比較
APIのレート制限(Rate Limiting)実装ガイドAPIのレート制限(Rate Limiting)実装ガイド|アルゴリズム選定と429エラーの適切なハンドリング