Siema, mam tablice obiektów z której musze wyrzucić itemy z drugiej tablicy obiektów. Jakieś propozycje jak to ogarnąć?
0
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