组合具有相同键的多个对象的内容,该键与 JavaScript 中的 属性

Combining the content of multiple objects that have the same key with that key as the property in JavaScript

我想合并多个对象的内容,这些对象具有与 JavaScript 中的 属性 相同的键。

对象:

const cat1 = { med1: { a: 10, b: 12 }, med2: { c: 14, d: 16 } };

const cat2 = { med1: { e: 18, f: 20 }, med2: { g: 22, h: 24 } };

预期输出:

{
   med1: { a: 10, b: 12, e: 18, f: 20 }, 
   med2: { c: 14, d: 16, g: 22, h: 24 }
}

我尝试同时使用对象传播和 Object.assign,但都没有成功。 对于对象传播,由于对象没有迭代器,因此返回错误。 Object.assign 会起作用,但是因为要组合的两个对象具有相同的键,所以第二个对象会覆盖第一个对象。

您可以迭代对象键并从它们的聚合中创建一个新对象。

你可以使用ES6扩展运算符(...),它允许我们快速将现有数组或对象的全部或部分复制到另一个数组或对象中。

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);

用于将两个对象与一个间接级别组合起来

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))