Skajinet
@Skajinet
JS, React

Как удалить объект из массива с одинаковым id и оставить тот, где есть доп свойство?

есть массив
let arr = [
			{id: 1, title: "Глобальный администратор"},
			{id: 4, title: "Преподаватель"},
                        {id: 2, title: "Ученик"},
			{id: 1, title: "Глобальный администратор", checked: true},
			{id: 4, title: "Преподаватель", checked: true}
		]


На выходе хотелось бы получить
[
  {id: 2, title: "Ученик"},
  {id: 1, title: "Глобальный администратор", checked: true},
  {id: 4, title: "Преподаватель", checked: true}
]
  • Вопрос задан
  • 977 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const result = Object.values(arr.reduce((acc, n) => (
  acc[n.id] = n.checked ? n : (acc[n.id] || n),
  acc
), {}));

или, с сохранением порядка:

const result = arr.reduce((acc, n) => {
  const i = acc.findIndex(m => m.id === n.id);
  if (!~i || (!acc[i].checked && n.checked)) {
    acc.push(n);
    if (~i) {
      acc.splice(i, 1);
    }
  }
  return acc;
}, []);

// или

const result = Object
  .values(arr.reduce((acc, n, i) => (
    (!acc[n.id] || (!acc[n.id][0].checked && n.checked)) && (acc[n.id] = [ n, i ]),
    acc
  ), {}))
  .sort((a, b) => a[1] - b[1])
  .map(n => n[0]);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы