Есть три распространённых подхода к удалению дубликатов из массива JavaScript, каждый с различными компромиссами производительности и читаемости.
Setconst unique = [...new Set(arr)];
Это самый рекомендуемый современный подход. Set автоматически хранит только уникальные значения, а оператор spread преобразует его обратно в массив.
filter с indexOfconst unique = arr.filter((item, index) => arr.indexOf(item) === index);
Здесь сохраняется только первое вхождение каждого значения: индекс каждого элемента сравнивается с позицией его первого появления.
indexOf выполняется на каждой итерации, поэтому на больших массивах работает медленноreduceconst unique = arr.reduce((acc, item) =>
acc.includes(item) ? acc : [...acc, item], []);
Здесь новый массив строится накоплением только ранее не встречавшихся значений.
includes на каждой итерации[...acc, item] создаёт новый массив на каждой итерации, что даёт дополнительную нагрузку на память| Метод | Производительность | Читаемость |
|---|---|---|
Set | ✅ Лучшая | ✅ Лучшая |
filter | ❌ O(n²) | ✅ Хорошая |
reduce | ❌ O(n²) | ⚠️ Многословный |
По умолчанию используй Set, если нет конкретной причины выбрать другой подход.
Подход с Set имеет временную сложность O(n²) из-за внутренних операций, требуемых для проверки дубликатов при вставке.
Новый — ещё не проверен сообществом
Вы