Usunięcie z tablicy zawartości drugiej tablicy - Js

0

Siema, mam tablice obiektów z której musze wyrzucić itemy z drugiej tablicy obiektów. Jakieś propozycje jak to ogarnąć?

4

Najprościej chyba to za pomocą metod .filter i .some

const arr = [{ id: 1 }, { id: 2 }];
const otherArray = [{ id: 2 }];

console.dir(
    arr.filter(item => {
       return !otherArray.some(delItem => delItem.id === item.id);
    })
); // output: [{ id: 1 }]

Kod powinien zadziałać pod warunkiem, że nigdzie nie zrobiłem żadnej literówki.

3

Rozwijając przykład @Xarviel - jeśli rzeczywiście możesz sprawdzać po jakimś unikalnym polu (id) to ta wersja powinna być znacznie szybsza dla większych tablic:

const removeById = (arr, otherArr) => {
  const ids = new Set(otherArr.map(x => x.id))
  
  return arr.filter(({id}) => !ids.has(id))
}

Użycie Set sprawia, że rozwiązanie ma liniową złożoność.

Edit
Wyniki benchmarka dla 1k elementów w obu tablicach:

Running "some vs Set" suite...
Progress: 100%

  some:
    1 044 ops/s, ±2.12%    | slowest, 93.42% slower

  Set:
    15 857 ops/s, ±0.36%   | fastest

Finished 2 cases!
  Fastest: Set
  Slowest: some

1 użytkowników online, w tym zalogowanych: 0, gości: 1