JavaScriptで配列の重複を削除する方法(Set)
もっとも簡単なのは Set とスプレッド構文の組み合わせです。
基本(数値・文字列の配列)
const arr = [1, 2, 2, 3, 1];
const result = [...new Set(arr)];
// [1, 2, 3]
特定キーで重複を消す(オブジェクト配列)
const users = [{id:1},{id:2},{id:1}];
const map = new Map(users.map(u => [u.id, u]));
const result = [...map.values()];
// [{id:1},{id:2}]
ポイント
- Set は同じ値を1つにまとめる集合。プリミティブ値に最適。
- オブジェクトは参照が違うとSetで消えないため、Mapでキー指定すると確実。
よくある質問
Setで重複が消えないのはなぜ?
オブジェクトは中身が同じでも参照が異なると別物と判定されます。id などのキーを基準にMapで重複排除すると解決します。
順序は保たれますか?
Setは挿入順を保持するため、[...new Set(arr)] は元の出現順のまま重複だけを除きます。