是否有一个构建方法可以合并我在Object.assign()
之间创建的两个嵌套对象
它在我的情况下不起作用,因为我的嵌套对象是array
。
var obj1 = {
"name": "Services",
"category": "Services",
"subCategory": [{
"name": "Negative",
"category": "Negative",
"subCategory": [{ // only this part differ
"name": "Expensive",
"val": 109,
"subCategory": null
}]
}]
};
var obj2 = {
"name": "Services",
"category": "Services",
"subCategory": [{
"name": "Negative",
"category": "Negative",
"subCategory": [{ // only this part differ
"name": "Disorganized",
"val": 25,
"subCategory": null
}]
}]
};
它应该像这样合并
var result = {
"name": "Services",
"category": "Services",
"subCategory": [{
"name": "Negative",
"category": "Negative",
"subCategory": [{ // array concatenation
"name": "Disorganized",
"val": 25,
"subCategory": null
}, {
"name": "Expensive",
"val": 109,
"subCategory": null
}]
}]
};
答案 0 :(得分:0)
它只是一个提案,如何处理相同的属性和相同的值以及这个特殊的数据结构,'name'
和'subCategory'
。
{
"name": "Services",
"subCategory": [
{
"name": "Negative", ...
"subCategory": [
{
"name": "Expensive", ...
},
{
"name": "Disorganized", ...
}
]
}
]
}
此解决方案适用于递归,如果名称不匹配,则会添加'subCategory'
的元素。
function fuse(target, source) {
if (target.name === source.name) {
source.subCategory.forEach(function (a) {
target.subCategory.some(function (b) {
return fuse(b, a);
}) || (target.subCategory = target.subCategory.concat(source.subCategory));
});
return true;
}
}
var obj1 = { "name": "Services", "category": "Services", "subCategory": [{ "name": "Negative", "category": "Negative", "subCategory": [{ "name": "Expensive", "val": 109, "subCategory": null }] }] },
obj2 = { "name": "Services", "category": "Services", "subCategory": [{ "name": "Negative", "category": "Negative", "subCategory": [{ "name": "Disorganized", "val": 25, "subCategory": null }] }] };
fuse(obj1, obj2);
document.write('<pre>' + JSON.stringify(obj1, 0, 4) + '</pre>');
&#13;