Estoy tratando de fusionar 2 matrices de objetos donde la matriz resultante debería tener solo objetos presentes en la matriz 1 (nombres seleccionados) pero con una propiedad de los objetos correspondientes de la matriz 2 (nombreDetalles). Hay una propiedad coincidente (única) para que coincida con ellos:
const selectedNames = [ { id: '11' name: 'joe', }, { id: '22', name: 'bill', }, ]; const nameDetails = [ { nameId: '11', salary: '23422', location: 'New Jersey', }, { nameId: '33', salary: '23424', location: 'New York', }, { nameId: '22', salary: '99999', location: 'Boston', }, { nameId: '44', salary: '323232', location: 'Chicago', }, ];
La propiedad coincidente es selectedNames.id === nameDetails.nameId. Todas las entradas en selectedNames definitivamente estarán presentes en nameDetails (pero no al revés). La matriz resultante debería verse así:
[ { id: '11', name: 'joe', salary: '23422', }, { id: '22', name: 'bill', salary: '99999' } ]
Estoy un poco confundido. Sé que probablemente consistirá en .includes() y filter() y... ¿para fusionar? No estoy seguro de cómo manejarlo.
Alternativamente, lo que probablemente será mucho más fácil, filtre la matriz nameDetails para tener solo objetos con nameId que existe (como id) en selectedNames.
Estoy un poco confundido por el resultado de tu ejemplo. Por ejemplo, ¿de dónde viene id: '11111'
?
¿Estás buscando algo como esto tal vez?
const selectedNames = [ { id: '11', name: 'joe', }, { id: '22', name: 'bill', }, ]; const nameDetails = [ { nameId: '11', salary: '23422', location: 'New Jersey', }, { nameId: '33', salary: '23424', location: 'New York', }, { nameId: '22', salary: '99999', location: 'Boston', }, { nameId: '44', salary: '323232', location: 'Chicago', }, ]; const merged = selectedNames.map(n => { n.salary = nameDetails.filter(d => n.id === d.nameId)[0].salary; return n; }); console.log(merged)
Nota: Esto cambiará los Nombres selectedNames
originales agregando el salary
de la entrada correspondiente en nameDetails
del nombre.
Tal vez esto se ajuste a tus necesidades:
selectedNames.map(({ id, name }) => { let salary = nameDetails.find((nameItem) => nameItem.nameId === id).salary; return { id, name, salary }; })
Resultará en:
[ { id: '11', name: 'joe', salary: '23422', }, { id: '22', name: 'bill', salary: '99999', } ]