¿Cómo comparar dos matrices y devolver otra? Estoy tratando de comparar dos matrices para comparar registros por id y luego generar una nueva matriz
const arr1 = [ { id: 1, title: "Admin" }, { id: 2, title: "Vip" } ]; const arr2 = [ { id: 1, root: 1 }, { id: 2, root: 0 } ]; let intersection = arr1.filter(({ id }) => arr2.includes(id));necesitar:
const needArr = [ { id: 1, title: "Admin", root: 1 }, { id: 2, title: "Vip", root: 0 } ];Podría hacer uso de map() y find() e iterar sobre la primera matriz arr1 :
const needArr = arr1.map(entry => { const root = arr2.find(arr2Entry => entry.id === arr2Entry.id)?.root return {...entry, root: root} } ) La propiedad root se establecerá como undefined para cada entrada en el resultado de needArr si no hay ninguna entrada con el mismo id en arr2 que en arr1 .
Algo así podría funcionar,
const giveNew = (a, b) => { let shorter, longer; if(a.length>b.length){ longer = a; shorter = b; } else { longer = b; shorter = a; } return longer.map((v, i)=> { const matched = shorter.find(val=> val.id === v.id); if(matched){ return { ...v, ...matched } } }) }Suponiendo que hay una relación 1:1 entre las matrices: map una de las matrices, find el objeto correspondiente en la otra matriz por su id y luego devuelva un nuevo objeto actualizado.
const arr1=[{id:1,title:"Admin"},{id:2,title:"Vip"}],arr2=[{id:1,root:1},{id:2,root:0}]; const out = arr2.map(obj => { return { ...arr1.find(inner => inner.id === obj.id), root: obj.root }; }); console.log(out);