嵌套对象分配Javascript [英] Nested object assign Javascript
问题描述
我有两个这样的对象:
var a = {prop:{a:'1'}}
var b = {prop:{b:'1'}}
我想使用Object.assign合并两个对象.我试过了:
I want to merge the two objects using Object.assign. I tried this:
var c = Object.assign(a,b)
> {prop:{b:'1'}}
如何获得此输出:
{prop:{a:'1',b:'1'}}
简而言之,我想在每个子对象上分配对象=>(如果存在属性,请首先检查儿童,如果不能,则不要覆盖)
In short, I want to do Object assign on every sub Objects => (IF PROPERTY EXISTS, CHECK CHILDREN FIRST IF IT AS OBJECT, DO NOT OVERIDE)
推荐答案
您可以对对象的每个级别使用深层合并功能.
You could use a deep merge function for every level of the object.
函数deepMerge
可以用作给定目标的单个函数,也可以用作
The function deepMerge
works as single function for a given target or as callback for Array#reduce
, where an array of objects is iterated and an empty object is supplied as startvalue
for reducing.
函数/回调本身具有两个参数,一个用于目标对象,一个用于源对象,在其中获取并迭代所有条目.
The function/callback itselft has two parameters, one for the target object and one for the source object where all entries are taken and iterated.
检查对象的值,如果类型是对象,则使用新的目标属性(如果未提供)或对退出属性进行递归调用deepMerge
.
A value of the object is checked and if the type is an object, then a recursive call of deepMerge
is done with a a new target property, if not given or to an exitent property.
如果该值不是对象,则使用给定的键将该值分配给target
.
If the value is not an object, the value is assigned to target
with the given key.
结果是具有给定对象所有属性的新对象.
The result is a new object with all properties of the given objects.
function deepMerge(target, source) {
Object.entries(source).forEach(([key, value]) => {
if (value && typeof value === 'object') {
deepMerge(target[key] = target[key] || {}, value);
return;
}
target[key] = value;
});
return target;
}
var a = { prop: { a: '1' } },
b = { prop: { b: '1' } },
c = [a, b].reduce(deepMerge, {});
console.log(c);
这篇关于嵌套对象分配Javascript的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!