Javascript 嵌套对象的默认值
假设我有以下提供默认值的对象:Javascript 嵌套对象的默认值,javascript,object,default-value,Javascript,Object,Default Value,假设我有以下提供默认值的对象: default_值={a:0,b:0,c:{aa:0,bb:0} 我还有另一个对象,它将覆盖一些默认值: override_值={a:5,c:{aa:5} 我想要的是将这两个对象组合在一起,这将导致 combined:{a:5,b:0,c:{aa:5,bb:0} 但是,使用像{…default_values,…override_values}这样的常规扩展运算符只会给出c:{aa:5},而不是c:{aa:5,bb:0}。对象可能很大,因此我无法硬编码所有嵌套
default_值={a:0,b:0,c:{aa:0,bb:0}
我还有另一个对象,它将覆盖一些默认值:
override_值={a:5,c:{aa:5}
我想要的是将这两个对象组合在一起,这将导致
combined:{a:5,b:0,c:{aa:5,bb:0}
但是,使用像{…default_values,…override_values}
这样的常规扩展运算符只会给出c:{aa:5}
,而不是c:{aa:5,bb:0}
。对象可能很大,因此我无法硬编码所有嵌套对象
我可以写一个函数来检查每个键。。。如果值不是对象,则使用
override | default
,否则对嵌套对象递归调用此函数。但我觉得这是很常见的,已经有类似的东西了。你在寻找类似于深度合并或合并的东西。
这些函数广泛存在于lodash
库中
下面是一个例子:-
function merge(target, source) {
Object.keys(source).forEach(key => {
const sourceValue = source[key];
if (sourceValue) {
const targetValue = target[key];
const newValues = merge(targetValue, sourceValue);
Object.assign(sourceValue, newValues);
}
});
Object.assign(target || {}, source);
return target;
}
你在寻找某种东西,比如说“深度合并”或“合并”。 这些函数广泛存在于
lodash
库中
下面是一个例子:-
function merge(target, source) {
Object.keys(source).forEach(key => {
const sourceValue = source[key];
if (sourceValue) {
const targetValue = target[key];
const newValues = merge(targetValue, sourceValue);
Object.assign(sourceValue, newValues);
}
});
Object.assign(target || {}, source);
return target;
}
你需要深度合并
const
isObject=o=>o&&typeof o==='object',
合并=(a,b)=>{
对象
.条目(b)
.forEach([k,v])=>a[k]=isObject(v)?merge(a[k]|{},v):v);
返回a;
},
默认值={a:0,b:0,c:{aa:0,bb:0},
覆盖_值={a:5,c:{aa:5},
结果=合并(默认值、覆盖值);
控制台日志(结果)代码>您需要一个深度合并
const
isObject=o=>o&&typeof o==='object',
合并=(a,b)=>{
对象
.条目(b)
.forEach([k,v])=>a[k]=isObject(v)?merge(a[k]|{},v):v);
返回a;
},
默认值={a:0,b:0,c:{aa:0,bb:0},
覆盖_值={a:5,c:{aa:5},
结果=合并(默认值、覆盖值);
控制台日志(结果)代码>只需搜索javascript deep Merge您可以显式地指定要合并的嵌套对象({…,c:{…combined.c,{…override_values.c}}
),也可以编写这样一个函数来通用地合并任意深度的对象。没有用于此目的的内置项。您可以使用深度合并库,例如lodash has.defaultsDep
只需搜索javascript深度合并您可以显式地拼写要合并的嵌套对象({…,c:{…combined.c,…override_values.c}
)或者编写这样一个函数,用于一般地合并任意深度的对象。没有用于此目的的内置项。您可以使用深度合并库,如lodash has\u0.DefaultsDep