假设我有以下提供默认值的对象:
default_values = {a: 0, b: 0, c: {aa: 0, bb: 0}}
我还有另一个对象可以覆盖其中一些默认值:
override_values = {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
,否则在嵌套对象上递归调用此函数。但我觉得这种情况很常见,已经有这样的事情了。
您正在寻找类似于 deep_merge 或 merge 的东西。
这些功能广泛存在于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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)