JavaScript: удалить дубликаты из массива

Категория: JavaScript · Язык: JavaScript · Обновлено:

Для массива примитивов удалите дубликаты через Array.from(new Set(items)) или [...new Set(items)]: порядок первого появления сохраняется. Для объектов сравнивайте по выбранному ключу, потому что два одинаковых по полям объекта всё равно являются разными ссылками.

Уникальные числа и строки

JavaScript
const values = [3, 1, 3, 2, 1];
const unique = [...new Set(values)];
console.log(unique.join(',')); // 3,1,2

Set сравнивает примитивы по SameValueZero; например, повторный NaN считается тем же значением.

Уникальные объекты по id

JavaScript
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

Set

Объекты с уникальным ключом

Map по ключу

Объекты без ключа

Нужна функция сравнения или нормализация

Как оставить первое вхождение объекта?

Создайте Map и добавляйте элемент только если ключ ещё не встречался. Это сохраняет порядок первого появления и его исходные данные.

Удаляет ли Set похожие объекты?

Нет. Два разных объекта {id: 1} имеют разные ссылки и оба сохранятся без явного сравнения по id.