Tengo dos matrices, mi objetivo es filtrar la segunda matriz arr2 por la primera matriz arr1 y obtener solo valores coincidentes donde prid es el mismo que arr2 id, los resultados deben let filtred = [ {name:'kiwi', color:'red', id:12123},{name:'kiwi', color:'red', id:12123}] , ¿cómo puedo lograr esto usando el filter ?
let arr1 = [ {prid:12123}, {prid:12124} ] let arr2 = [ {name:'kiwi', color:'red', id:12123}, {name:'kiwi2', color:'blue',id:12129}, {name:'kiwi3', color:'green',id:12124} ]Tenga en cuenta: de acuerdo con sus requisitos, su salida esperada no es correcta:
Puede intentar usar Array.prototype.some() dentro de Array.prototype.filter() haciendo coincidir el valor de la propiedad respectiva ( prid of arr1 con id of arr2 ).
let arr1 = [ {prid:12123}, {prid:12124} ] let arr2 = [ {name:'kiwi', color:'red', id:12123}, {name:'kiwi2', color:'blue',id:12129}, {name:'kiwi3', color:'green',id:12124} ] let filtred = arr2.filter(i => arr1.some(j => j.prid == i.id)) console.log(filtred);Puede usar Array.prototype.reduce que permite crear otra matriz con una estructura diferente
let arr1 = [ {prid:12123}, {prid:12124} ] let arr2 = [ {name:'kiwi', color:'red', id:12123}, {name:'kiwi2', color:'blue',id:12129}, {name:'kiwi3', color:'green',id:12124} ] let results = arr2.reduce((accumulator, currentItem) =>{ let itemExists = arr1.findIndex(item => item.prid === currentItem.id); return itemExists !== -1? accumulator.concat(currentItem): accumulator; }, []); console.log(results);