@beefront17

Как отфильтровать массив объектов?

Есть массив:

const arr1 = [
  {
    id: 1,
    items: [{ id: 2, parId: '1' }, { id: 2, parId: '1' }],
  },
  {
    id: 2,
    items: [{ id: 3, parId: '2' }, { id: 4, parId: '2' }],
  },
...
];

Приходит объект, который надо убрать. Например: { id: 3, parId: '2' }.

Нужно отфильтровать массив, чтобы осталось

[
  {
    id: 1,
    items: [{ id: 2, parId: '1' }, { id: 2, parId: '1' }],
  },
  {
    id: 2,
    items: [{ id: 4, parId: '2' }],
  },
...
];

На данный момент реализовал это через forEach и filter:

function removeItem(list, item) {
  const array = [];
  list.forEach(
    k =>
      k.id === item.parId
        ? array.push({
            ...k,
            items: _filter(k.items, i => i.id !== item.id),
          })
        : array.push(k),
  );
  return array;
}

Но думаю, можно лучше это сделать.
  • Вопрос задан
  • 242 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Собрать новый массив:

const filterItem = (list, item) =>
  list.map(n => ({
    ...n,
    items: n.items.filter(m => m.id !== item.id),
  }));

Обновить существующий:

function removeItem(list, { id }) {
  list.forEach(({ items: n }) => {
    n.splice(0, n.length, ...n.filter(m => m.id !== id));
  });
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы