javascript - Cum pot să obțin obiecte dintr-un array cu un id specific comparat cu numerele din alt array
Trebuie să compar un array de obiecte id din firstArray cu array-ul de numere (secondArray) și să returnez un array nou cu obiectele din primul array ale căror id-uri există în al doilea array.
Deci, la final, vreau un nou array cu obiecte cu id-urile 39 și 41.
De fapt, găsesc ceva de genul acesta:
const result = arr2.filter(o => arr1.find(x => x.id === o));const arr1 =
"blocks": [
{
"id": 1,
"functions": [ 0, 1 ]
},
{
"id": 39,
"functions": [ 0, 1, 3, 4 ]
},
{
"id": 41,
"functions": [ 0, 1 ]
}
]
const arr2 = [39, 41]Răspuns #1
Poți folosi funcția includes() în timpul filtrării. Includes() funcționează ca funcția in array.
const arr1 =
[ {
"id": 1,
"functions": [ 0, 1 ] },
{
"id": 39,
"functions": [ 0, 1, 3, 4 ]
},
{
"id": 41,
"functions": [ 0, 1 ]
}
]
const arr2 = [39, 41]
const result = arr1.filter(o => arr2.includes(o.id));
console.log(result)Răspunsul #2
Poți crea un Map pentru a vedea dacă există un element în Map în array-ul filtrat. Obținerea unui element din metoda Map este O(1):
const blocks = [
{
"id": 1,
"functions": [
0,
1
]
},
{
"id": 39,
"functions": [
0,
1,
3,
4
]
},
{
"id": 41,
"functions": [
0,
1
]
}
];
const arr2 = [39, 41];
const arr2Maps = new Map(arr2.map(a=>[a, a]));
const result = blocks.filter(o => arr2Maps.get(o.id));
console.log(result)În plus, poți folosi metodele filter și some. Totuși, metoda some are O(n):
const blocks = [
{
"id": 1,
"functions": [
0,
1
]
},
{
"id": 39,
"functions": [
0,
1,
3,
4
]
},
{
"id": 41,
"functions": [
0,
1
]
}
];
const arr2 = [39, 41]
const result = blocks.filter(o => arr2.some(a=> a ==o.id ));
console.log(result)