I chcemy przefiltrować dane zbioru set2, w taki sposób, że pobieramy, tylko te elementy, które znajdują się, w zbiorze set1.
Potrzebujemy pobrać część wspólną zbiorów set1 i set2. Czyli wynik końcowy będzie taki:
const result = ['a', 'd'];
Te dane można pobrać za pomocą kombinacji funkcji filter i indexOf:
const result = set1.filter(item => set2.indexOf(item) > -1);
Metoda indexOf sprawdza, czy podana wartość znajduje się w tablicy. Jeśli "tak", zwróci indeks tej wartości. Jeśli "nie", zwróci wartość: -1. Dzięki temu można łatwo przefiltrować dane.
Filtrowanie tablicy obiektów
A jak przefiltrować dane po zbiorach składających się z tablicy obiektów:
const set1 = [{ id: 1, value: 'Some value 1' }, { id: 2, value: 'Some value 2' }, { id: 3, value: 'Some value 3' }, { id: 4, value: 'Some value 4' }];
const set2 = [1, 4];
Chcemy pobrać obiekty z tablicy set1 bazując na tablicy set2, która zawiera id tych obiektów.
Można te dane pobrać tak:
const result = set1.filter((itemSet1) => set2.some((itemSet2) => itemSet1.id === itemSet2));
console.log(result); // [{ id: 1, value: 'Some value 1' }, { id: 4, value: 'Some value 4' }]