默认对象
The Microsoft Exchange IMAP4 service
要合并的对象
var default_obj = {
"cloud": {
"something_1": {
"view": false,
"create": false
},
"something_2": {
"view": false,
"create": false
},
"something_3": {
"view": false,
"create": false
},
}
}
合并后
var merge_obj = {
"cloud": {
"something_1": {
"view": true,
"create": true
},
"something_2": {
"view": false,
"create": false
}
}
}
我基本上希望第二个对象覆盖默认对象中的所有内容,但是,如果第二个对象中没有找到默认对象中的新信息,则包括在内。
仅通过执行var merge_obj = {
"cloud": {
"something_1": {
"view": true,
"create": true
},
"something_2": {
"view": false,
"create": false
}
"something_3": {
"view": false,
"create": false
}
}
}
就可以覆盖覆盖的第一部分,但省去了{ ...default_obj, ...merge_obj }
如果有人有任何指导,我将不胜感激。
编辑:只是要注意,这些对象并不总是保持something_3
或view
的确可以是任何东西,但它的尺寸永远不会更深。
答案 0 :(得分:0)
我不知道是否有内置的功能,但是我本来以为只是循环遍历?
for(var x in merge_obj['cloud']) {
default_obj['cloud'][ x ] = merge_obj['cloud'][x];
}
还没有进行测试,但是认为它会起作用,因为如果已经存在,它会被覆盖;否则,它将插入。
答案 1 :(得分:0)
您需要递归以遍历属性,可以手动创建此函数,但由于数组和对象之间的相似性以及其他一些条件,因此我建议使用任何库或使用已测试的代码。
的链接答案 2 :(得分:0)
尝试以下npm库:https://www.npmjs.com/package/deep-extend
否则,您必须递归到每个子对象中才能合并它们。
答案 3 :(得分:0)
此函数将在两个对象之间进行合并。
function merge(obj, src) {
Object.keys(src).forEach(function(key) {
if (typeof src[key] === 'object') {
if (typeof obj[key] === 'undefined') obj[key] = {};
obj[key] = merge(obj[key], src[key]);
} else {
obj[key] = src[key];
}
});
return obj;
}
merge(default_obj, merge_obj)
但是已经有像lodash这样的可用库已经做到了。例:
_.merge(default_obj, merge_obj);