Примитивы
const unique = [...new Set(arr)];
arr.filter((v, i, a) => a.indexOf(v) === i);
Объекты
Set сравнивает по ссылке. Нужен ключ:
function uniqueBy(arr, keyFn) {
const seen = new Set();
return arr.filter((item) => {
const k = keyFn(item);
if (seen.has(k)) return false;
seen.add(k);
return true;
});
}
Сложность
Set — O(n) среднее; indexOf в filter — O(n²). Для больших массивов — Set/Map.