javascript - 组合两个复杂对象不起作用 : Javascript

标签 javascript ecmascript-6 ecmascript-5

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

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 的“嵌套”中。如果 obj2 的“嵌套”中的某些内容不存在于 obj1 的“嵌套”中,则删除该对象。沙箱内附加的测试用例文件

输出应如下所示:

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”或“合并嵌套对象”即可。 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));

关于javascript - 组合两个复杂对象不起作用 : Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60223299/

相关文章:

javascript - 了解 ES6 中数组的区别?

javascript - 是否有一种机制可以在没有可变变量的情况下在 ES6 (ECMAScript 6) 中循环 x 次?

javascript - 在 json 对象数组上添加唯一生成的标识符

javascript - 如何使用 JS 向一个元素添加多个类?

javascript - 我应该什么时候使用 let 和 var?

javascript - 新的 ECMAScript 5 函数有哪些现代化脚本?

javascript - 创建自定义元素似乎不适用于 YouTube,但适用于 Vimeo 网站

javascript - jQuery 动画无法正常工作

javascript - 在主(父)页面的 div 中加载 Ajax 结果

javascript - 为什么 splice 方法不起作用并在 TypeScript 中删除数组上的项目