Quiero combinar el contenido de varios objetos que tienen la misma clave con esa clave como propiedad en JavaScript.
Objetos:
const cat1 = { med1: { a: 10, b: 12 }, med2: { c: 14, d: 16 } }; const cat2 = { med1: { e: 18, f: 20 }, med2: { g: 22, h: 24 } };Rendimiento esperado:
{ med1: { a: 10, b: 12, e: 18, f: 20 }, med2: { c: 14, d: 16, g: 22, h: 24 } }He intentado usar tanto la distribución de objetos como Object.assign sin éxito. Con la distribución de objetos, dado que los objetos no tienen iterador, esto devuelve un error. Sin embargo, Object.assign funcionaría, ya que los dos objetos para combinar tienen la misma clave, el segundo objeto está sobrescribiendo al primero.
Puede iterar sobre las claves de objeto y crear un nuevo objeto a partir de su agregación.
Puede usar el operador de extensión ES6 ( ... ) que nos permite copiar rápidamente todo o parte de una matriz u objeto existente en otra matriz u objeto.
const cat1 = { med1: { a: 10, b: 12 }, med2: { c: 14, d: 16 } }; const cat2 = { med1: { e: 18, f: 20 }, med2: { g: 22, h: 24 } }; let resultObject = {}; Object.keys(cat1).map(key => { // iterate over the keys resultObject = { ...resultObject, [key]: {...cat1[key], ...cat2[key]} // merge two objects } return; }); console.log(resultObject);Por combinar dos objetos con un solo nivel de indirección 👇
const cat1 = { med1: { a: 10, b: 12 }, med2: { c: 14, d: 16 } } const cat2 = { med1: { e: 18, f: 20 }, med2: { g: 22, h: 24 } } const merge = (o1, o2) => Object.keys(o1) .reduce((p, key) => (p[key] = { ...o1[key], ...o2[key] }, p), {}) console.log(merge(cat1, cat2))