JavaScript: удалить дубликаты из массива
Для массива примитивов удалите дубликаты через Array.from(new Set(items)) или [...new Set(items)]: порядок первого появления сохраняется. Для объектов сравнивайте по выбранному ключу, потому что два одинаковых по полям объекта всё равно являются разными ссылками.
Уникальные числа и строки
const values = [3, 1, 3, 2, 1];
const unique = [...new Set(values)];
console.log(unique.join(',')); // 3,1,2Set сравнивает примитивы по SameValueZero; например, повторный NaN считается тем же значением.
Уникальные объекты по id
const users = [{id: 1, name: 'Ира'}, {id: 1, name: 'Ирина'}, {id: 2, name: 'Антон'}];
const uniqueUsers = [...new Map(users.map((user) => [user.id, user])).values()];
console.log(uniqueUsers.map((user) => user.name).join(',')); // Ирина,АнтонЭтот вариант оставляет последнее значение для повторяющегося id. Чтобы сохранить первое, проверяйте наличие ключа перед добавлением в Map.
Тип элементов | Подход |
|---|---|
Строки, числа, boolean |
|
Объекты с уникальным ключом |
|
Объекты без ключа | Нужна функция сравнения или нормализация |
Как оставить первое вхождение объекта?
Создайте Map и добавляйте элемент только если ключ ещё не встречался. Это сохраняет порядок первого появления и его исходные данные.
Удаляет ли Set похожие объекты?
Нет. Два разных объекта {id: 1} имеют разные ссылки и оба сохранятся без явного сравнения по id.