首页 > 解决方案 > 如何将对象的两个对象合并为一个对象

问题描述

如何将对象的两个对象合并为一个对象?

例子

let obj1 = {monkey:{size: 120, color: "black"}, cat: {size: 30, color: "gray"}}

let obj2 = {monkey:{country: "africa", test: "test"}, cat: {country: "all", testCat: "testCat"}}

输出应该是:

{monkey:{size: 120, color: "black", country: "africa", test: "test"}, cat: {size: 30, color: "gray", country: "all", testCat: "testCat"}}

我不知道那里有多少动物。

像这样的东西

let merged = {...obj1, ...obj2}

标签: javascriptecmascript-6

解决方案


我们需要知道我们必须合并多少个对象,所以我将它们分组到一个数组中。

这个解决方案可能看起来很糟糕,但它有效:)

let obj1 = {
  monkey: {
    size: 120,
    color: "black"
  },
  cat: {
    size: 30,
    color: "gray"
  }
};

let obj2 = {
  monkey: {
    country: "africa",
    test: "test"
  },
  cat: {
    country: "all",
    testCat: "testCat"
  }
};

let objects = [obj1, obj2];
let output = {};



objects.map(function(obj) {
  var keys = Object.keys(obj);
  keys.map(function(key) {
    if (!output[key])
      output[key] = obj[key];
    else {
      var keyss = Object.keys(obj[key]);
      keyss.map(function(item) {
        output[key][item] = obj[key][item];
      });
    }
  });
});



console.log(output);

使用箭头函数进行优化。

objects.map(obj =>Object.keys(obj).map(key => output[key] ?  Object.keys(obj[key]).map( item =>output[key][item] = obj[key][item] ) : output[key] = obj[key] ));

推荐阅读