如何合并两个对象,其中一个具有某些属性,而另一个具有其他属性?

时间:2020-01-30 17:24:18

标签: javascript object

我有两个对象(有些可能称为字典),如下所示:

object1 = 
{
     id123: 
     {
           name: Copenhagen,
           type: 'city'
     }
}

object2 = 
{
     id123: 
     {
           name: Copenhagen,
           type: 'county',
           props: { id1: true, id: false}
     },
     id1234: 
     {
           name: Pars,
           type: 'county',
           props: { id1: true, id: false}
     },
     id12345: 
     {
           name: London,
           type: 'county',
           props: { id1: true, id: false}
     },
}

如果两个id相同,那么我合并的对象需要采用object1的类型,并且需要保持对象object2的属性,就像这样(注意哥本哈根):

mergedObjects = 
{
     id123: 
     {
           name: Copenhagen,
           type: 'city',
           props: { id1: true, id: false}
     },
     id1234: 
     {
           name: Pars,
           type: 'county',
           props: { id1: true, id: false}
     },
     id12345: 
     {
           name: London,
           type: 'county',
           props: { id1: true, id: false}
     },
}

我已尝试使用传播算子进行以下操作:

mergedObjects = { ...object2, ...object1 }

但是整个id对象将被替换,而不是合并。你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

通过object2键,添加要合并的值,并从object1更新type(如果它们使用Object2的类型)。

const object1 = {
  id123: {
    name: 'Copenhagen',
    type: "city"
  }
};

const object2 = {
  id123: {
    name: 'Copenhagen',
    type: "county",
    props: { id1: true, id: false }
  },
  id1234: {
    name: 'Pars',
    type: "county",
    props: { id1: true, id: false }
  },
  id12345: {
    name: 'London',
    type: "county",
    props: { id1: true, id: false }
  }
};

const merged = {};
Object.keys(object2).forEach(key => {
  merged[key] = { ...object2[key], type: object1[key] ? object1[key].type : object2[key].type };
});

console.log(merged);