通过键Javascript合并两个对象(不覆盖不同的值)

时间:2017-11-05 20:13:37

标签: javascript lodash

我有一个objetcs数组,每个对象包含数组。我需要操作它,以便内部数组中的元素如果不同则被追加,或者如果相同则保持为单个;基本上按type分组。这有点难以解释,所以我举个例子。 这是我的数组:

let array1 = [{
      1: [{
         id: "aaaa",
         name: 'name1',
         type: 1
       }],
      2: [{
         id: 'bbbb',
         name: 'name2',
         type: 2
       }],
      3: [{
         id: "ccc",
         name: 'name3',
         type: 3
      }] 
     },
     {1: [{
         id: "aaaa",
         name: 'name1',
         type: 1
       }],
      2: [{
         id: 'bbbb',
         name: 'name2',
         type: 2
       }],
      3: [{
        id: "dddd",
        name: 'name4',
        type: 3
       }], 
     };

我希望得到类似以下内容的内容:

        let result = {
      1: [
        {
          id: "aaaa",
          name: 'name1',
          type: 1
        }],
      2: [{
          id: 'bbbb',
          name: 'name2',
          type: 2
        }],
      3: [{
          id: "cccc",
          name: 'name3',
          type: 3
        },
        {
          id: "dddd",
          name: 'name4',
          type: 3
        }
      ]
    }

最有效的方法是什么(可能使用lodash)? 我已尝试过foreach并分配了一些内容,但我总是最终重写内部数组... 谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您可以使用_.mergeWith传递比较功能:

var result = array1.shift();
_.mergeWith(result, ...array1, function(a, b) {
    return _.isEqual(a, b) ? a : _.concat(a, b);
});
console.log(result);

demo fiddle