合并两个复杂对象均无效:Javascript

问题描述 投票:0回答:1

我有一个具有以下结构的源对象

var obj1 = {
          type: "type1",
          nested: {
                level1: [
                  { field: "field1", value: "val1"},
                  { field: "field2", value: "val2"},
                  {
                     level2: [
                                  {
                                    field: "abc",
                                    value: "11",
                                  },
                                  {
                                    field: "abc",
                                    value: "12",
                                  }
                             ]
                  }
                ]
          },
          in: 0,
          out: 20
};

还有一个输入对象,应该基于该对象进行合并

var obj2 = {
          type: "type1",
          nested: {
                level1: [
                  { field: "field1", value: "val1"},
                  { field: "field3", value: "val5" }
                ]
          },
          in: 0,
          out: 20
};

基于需要合并的新对象,结果应仅包含唯一对象。就我而言,该对象可以深入到2级。我唯一需要的是对“嵌套”对象的操作。如果存在相同的键,则更新值,否则只需附加它。 obj2的“嵌套”中的内容也始终位于obj1的“嵌套”中。如果obj1的“嵌套”中不存在obj2的“嵌套”,则删除该对象。沙箱中随附的测试用例文件

输出应类似于:

result = {
              type: "type1",
              nested: {
                      level1: [
                                { field: "field1", value: "val1"},
                                { field: "field2", value: "val2"},
                                { field: "field3", value: "val5" },
                                {
                                 level2: 
                                     [
                                         {
                                           field: "abc",
                                           value: "11",
                                         },
                                         {
                                           field: "abc",
                                           value: "12",  
                                         }
                                      ]
                                    }
                                  ]
                             },
                            in: 0,
                            out: 20
    };

我尝试过的方法:

const merged = [...new Set([...obj1.nested.level1, ...obj2.nested.level1])]

沙盒:https://codesandbox.io/s/angry-liskov-e5m1m

javascript ecmascript-6 ecmascript-5
1个回答
0
投票
仅是Google“深度合并javascript”或“合并嵌套对象”。 Here是我发现的一个例子:

// Merge a `source` object to a `target` recursively const merge = (target, source) => { // Iterate through `source` properties and if an `Object` set property to merge of `target` and `source` properties for (const key of Object.keys(source)) { if (source[key] instanceof Object) Object.assign(source[key], merge(target[key], source[key])) } // Join `target` and modified `source` Object.assign(target || {}, source) return target } console.log(merge(obj1, obj2));

© www.soinside.com 2019 - 2024. All rights reserved.