Encodera

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

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

Как убрать повторяющиеся объекты по полю

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

Оставьте первый объект с каждым значением поля, запоминая увиденные значения в Set:

const users = [
  { id: 1, name: 'Anna' },
  { id: 2, name: 'Oleg' },
  { id: 1, name: 'Anna (copy)' },
];
const seen = new Set();
const unique = users.filter((user) => {
  if (seen.has(user.id)) return false;
  seen.add(user.id);
  return true;
});
 
console.log(unique.map((user) => user.name).join(', '));

Результат:

Anna, Oleg

Оставить последний

Map с полем в качестве ключа перезаписывает ранние объекты, и остаётся последний:

const users = [
  { id: 1, name: 'Anna' },
  { id: 2, name: 'Oleg' },
  { id: 1, name: 'Anna (updated)' },
];
const unique = [...new Map(users.map((user) => [user.id, user])).values()];
 
console.log(unique.map((user) => user.name).join(', '));

Результат:

Anna (updated), Oleg

Частая ошибка

new Set() напрямую с объектами не поможет: он сравнивает их по ссылке, а разные объекты всегда разные:

const users = [{ id: 1 }, { id: 1 }];
 
console.log(new Set(users).size);

Результат:

2

Функции из этого ответа

  • Map — Коллекция пар ключ — значение, где ключом может быть что угодно.
  • Array.prototype.filter — Создаёт новый массив из элементов, прошедших проверку.
  • Set — Коллекция уникальных значений.

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

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