¿Cómo crear una nueva matriz basada en las dos matrices diferentes con la misma identificación en Typescript/JavaScript?
let array1 = [ { invoiceId: 1, name:'Ajay', contact:'0001' }, { invoiceId: 2, name:'vijay', contact:'1234' }, { invoiceId: 3, name:'Amit', contact:'4581' }, ]; let array2 = [ { invoiceId: 1, age:24, email:'1223@gmail.com' }, { invoiceId: 2, age:23, email:'23gmail@gmail.com' }, ];en ambas matrices, el campo común es la identificación de la factura basada en la identificación de la factura, tiene que crear una nueva matriz como se muestra a continuación.
let expectedresult = [ { name:'Ajay', age:24 }, { name:'vijay', age:23 }, { name:'Amit', age:null }, ];cómo manejar esto en Typescript/JavaScript. ¿Hay alguna solución basada en Lodash?
Creo que esta puede ser una solución.
let array1 = [ { invoiceId: 1, name:'Ajay', contact:'0001' }, { invoiceId: 2, name:'vijay', contact:'1234' }, { invoiceId: 3, name:'Amit', contact:'4581' }, ]; let array2 = [ { invoiceId: 1, age:24, email:'1223@gmail.com' }, { invoiceId: 2, age:23, email:'23gmail@gmail.com' }, ]; console.log(array1.map(item=>({name:item.name, age: array2.filter(filteritem=>filteritem.invoiceId===item.invoiceId)[0]?.age || null})))Tienes que mapear a través de array1 y encontrar la coincidencia en array2 . Luego devuelva el nombre y la edad si se encuentra.
let expectedresult = array1.map(el => { let match = array2.find(obj => obj.invoiceId === el.invoiceId) return { name: el.name, age: match ? match.age : null } })Puede crear un mapa de objetos desde array2 basado en invoiceId como su clave y luego acceder fácilmente a él mientras itera sobre array1.
const map2 = Object.fromEntries(array2.map(item=>[item['invoiceId'], item.age])) const expectedArray = array1.map(item=> { return { name: item.name, age: map2[item.invoiceId] ? map2[item.invoiceId] : null } })