Pedir una solución mejorada
Hola, tengo 2 arreglos y quiero filtrar uno con el único valor presentado en el otro.
es decir
data1 = [ { "c_id": 90, "c_name": "Test 1", }, { "c_id": 95, "c_name": "Test 2", }, { "c_id": 93, "c_name": "Test 3", } ] data2 = [ { "id": 92, "name": "Test 4", "rates": [] }, { "id": 90, "name": "Test 1", "rates": [] }, { "id": 95, "name": "Test 2", "rates": [] }, { "id": 93, "name": "Test 3", "rates": [] }, ]De la matriz anterior, quiero filtrar data2 con solo la identificación presentada en data1.
tengo el siguiente codigo
let c = [] data1.filter(b => { if (data2.find(a => a.id == b.c_id)) { c.push(data2.find(a => a.id == b.c_id)) } }) console.log(c)Que correctamente. Por favor, ¿alguien puede decir si hay alguna solución mejorada para esto?
Puede crear un conjunto de identificadores de datos1 y usar Array.filter para filtrar el identificador que está presente en el conjunto.
const data1 = [ { c_id: 90, c_name: "Test 1", }, { c_id: 95, c_name: "Test 2", }, { c_id: 93, c_name: "Test 3", }, ]; const data2 = [ { id: 92, name: "Test 4", rates: [], }, { id: 90, name: "Test 1", rates: [], }, { id: 95, name: "Test 2", rates: [], }, { id: 93, name: "Test 3", rates: [], }, ]; const set = new Set(data1.map((item) => item.c_id)); const result = data2.filter((item) => set.has(item.id)); console.log(result);