JavaScript: Jak filtrować dane z dwóch zbiorów?

Opublikowano: 14.05.2024 - tagi: JavaScript Filtrowanie Dane Zbiór Tablica Obiekt

Filtrowanie danych — dwa zbiory

Załóżmy, że mamy następujące dwa zbiory danych:

const set1 = ['a', 'b', 'c', 'd'];
const set2 = ['a', 'e', 'f', 'd', 'g'];

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' }]