Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 嵌套对象的默认值_Javascript_Object_Default Value - Fatal编程技术网

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