Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

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

Короткий ответ

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 — Ищет значение в массиве и возвращает его индекс.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.