将两个复杂对象组合在一起是行不通的:Javascript
Clubbing both complex objects does not work: Javascript
我有一个具有以下结构的源对象
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 级。我唯一需要的是对 "nested" 对象进行操作。如果存在相同的键,则更新该值,否则只需附加它。此外,obj2 的 "nested" 中的内容将始终存在于 obj1 的 "nested" 中。如果 obj2 的 "nested" 的某些内容不存在于 obj1 的 "nested" 中,则删除该对象。沙箱内附加的测试用例文件
输出应如下所示:
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])]
只是 google "deep merge javascript" 或 "merge nested objects"。 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));
我有一个具有以下结构的源对象
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 级。我唯一需要的是对 "nested" 对象进行操作。如果存在相同的键,则更新该值,否则只需附加它。此外,obj2 的 "nested" 中的内容将始终存在于 obj1 的 "nested" 中。如果 obj2 的 "nested" 的某些内容不存在于 obj1 的 "nested" 中,则删除该对象。沙箱内附加的测试用例文件
输出应如下所示:
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])]
只是 google "deep merge javascript" 或 "merge nested objects"。 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));