我有一个具有以下结构的源对象
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])]
// 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));