Как удалить дубликаты из массива
Короткий ответ
Set хранит только уникальные значения. Превратите массив в Set и обратно:
console.log([...new Set([1, 2, 2, 3, 1])].join(', '));Результат:
1, 2, 3Массив объектов
Объекты сравниваются по ссылке, поэтому Set для них не подходит. Оставьте первый объект с каждым идентификатором:
const users = [
{ id: 1, name: 'Anna' },
{ id: 2, name: 'Oleg' },
{ id: 1, name: 'Anna' },
];
const unique = users.filter(
(user, index) => users.findIndex((other) => other.id === user.id) === index,
);
console.log(unique.map((user) => user.name).join(', '));Результат:
Anna, OlegБез учёта регистра
Чтобы считать Anna и anna одним значением, сравнивайте нормализованные значения:
const names = ['Anna', 'anna', 'Oleg', 'ANNA'];
const seen = new Set();
const unique = names.filter((name) => {
const key = name.toLowerCase();
if (seen.has(key)) return false;
seen.add(key);
return true;
});
console.log(unique.join(', '));Результат:
Anna, OlegЧастая ошибка
Set считает число 1 и строку '1' разными значениями. Сначала приведите значения к одному типу:
const ids = [1, '1', 2, '2'];
console.log([...new Set(ids)].length);
console.log([...new Set(ids.map(Number))].length);Результат:
4
2Функции из этого ответа
- Set — Коллекция уникальных значений.
- Array.prototype.filter — Создаёт новый массив из элементов, прошедших проверку.
- Array.prototype.indexOf — Ищет значение в массиве и возвращает его индекс.