配列から重複を削除するのは、JavaScriptでよく行われるタスクです。以下に、これを実現するためのいくつかの効果的な方法を紹介します。
方法1: Setを使用する (推奨)
重複を削除する最もシンプルで高性能な方法は、Setを使用することです:
メリット:
- クリーンで簡潔
- パフォーマンスが良い O(n)
- プリミティブな値に対応
デメリット:
- プリミティブな値(数値、文字列、ブーリアン)にのみ対応
- オブジェクトは参照で比較される
方法2: Filterを使用する
より複雑なシナリオや最初の要素を保持したい場合:
メリット:
- カスタムロジックに柔軟に対応
- 理解しやすい
デメリット:
indexOfのため、パフォーマンスが低い O(n²)
方法3: Reduceを使用する
reduceを使用した関数型アプローチ:
メリット:
- 関数型プログラミングスタイル
- 他の変換と組み合わせ可能
デメリット:
includesのため、パフォーマンスが低い- 記述が冗長
方法4: オブジェクトの場合 (Mapを使用する)
オブジェクトを扱う場合、特定のプロパティで比較する必要があります:
メリット:
- オブジェクトに対応
- 一意性のためのプロパティを指定可能
- パフォーマンスが良い
デメリット:
- 記述が複雑
- 最後の要素を保持する(最初の要素を保持するように変更可能)
パフォーマンス比較
大規模な配列(10,000以上の要素)の場合:
- Set: ~1ms (最速)
- Map (オブジェクト用): ~2ms
- Reduce: ~50ms
- Filter: ~100ms (最も遅い)
推奨事項
- プリミティブな値(数値、文字列、ブーリアン)にはSetを使用
- オブジェクトで特定のプロパティで重複を削除する場合はMapを使用
- カスタムロジックが必要な場合や小規模な配列を扱う場合は、FilterまたはReduceを使用
注意: これらの方法はすべて新しい配列を作成します。元の配列を直接変更する必要がある場合は、別のアプローチが必要です。