嵌套对象的默认值

2023-12-08

假设我有以下提供默认值的对象:

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(使用前将#替换为@)

嵌套对象的默认值 的相关文章

随机推荐

  • ProcessBuilder 找不到指定的文件,而 Process 可以[重复]

    这个问题在这里已经有答案了 我正在尝试从 Java 程序运行 jar 文件 并且使用成功getRuntime Process processAlgo Runtime getRuntime exec java jar algoPath 但是当
  • Google 图表错误:b.L 不是函数

    我使用 Google API 制作了一个包含 3 个图形的小页面 一切都很完美 然而 从一个时刻到另一个时刻都崩溃了 在图表中出现此消息的地方 bL 不是函数 有人可以向我解释为什么会发生这种情况吗 我的例子working
  • WPF XAML StringFormat:C# 4.0 中的文化解决方法被破坏?

    周围的工作 FrameworkElement LanguageProperty OverrideMetadata typeof FrameworkElement new FrameworkPropertyMetadata XmlLangua
  • 使用 Jersey 2 (HK2) DI 注册 Dropwizard 配置

    在我的 Dropwizard 1 2 4 应用程序中 我无法将 Dropwizard 配置注入到由 HK2 实例化的类中 实现这一目标的最佳方法是什么 只需绑定配置即可instance Override public void run fi
  • 我可以信任 Java SecurityManager 沙箱吗?

    我正在编写一个 JavaFX2 应用程序 它接受从远程位置加载的任意代码 对我来说 使用自定义 SecurityManager ClassLoader 和 ProtectionDomain 是最佳选择 不幸的是 这似乎与用于沙箱小程序的设置
  • 手动指定特定链接符号的重新映射

    在不修改这两个源文件的情况下 有没有办法获取编译它们生成的目标文件 并说服链接器链接foo在 main v1 c 中bar在bar c main v1 c void foo void int main void foo bar c incl
  • JavaScript 是多线程的吗?

    这是我的问题 我需要使用 jQuery getScript 动态下载多个脚本并执行某些JavaScript加载所有脚本后的代码 所以我的计划是做这样的事情 function GetScripts scripts callback var l
  • Python 和 C++ 模数

    我正在学习 C 在尝试编写一个小程序时 我发现了一些奇怪的东西 这是关于模数 C 代码 cout lt lt 325 325 100 lt lt endl 300 cout lt lt 325 325 100 300 和Python代码 p
  • 关于泛型方法调用的 Java 类型提示

    我想知道调用具有如下签名的静态方法的正确方法是什么 public static
  • 如何获取单选按钮的文本(而不是值)

    我知道我可以获取单选按钮的 值 属性 但我发现获取单选按钮的文本非常困难 考虑下面的例子 它有 3 个单选按钮 并尝试提醒第一个单选按钮的值 红色 然后尝试提醒单选按钮的文本 苹果 但失败了 获取几乎任何元素的文本都可以使用 elem ch
  • 正则表达式在文件夹中查找文件

    如何查找文件夹中与正则表达式模式匹配的所有文件 Thanks The GetFiles方法允许您指定通配符模式 但不是真正的正则表达式 另一种可能性是简单地循环遍历文件并根据正则表达式验证它们的名称 IEnumerable
  • 将图像大小调整到给定边界区域的最简单方法是什么?

    我想创建一个函数 例如 def generateThumbnail self width height Generates thumbnails for an image im Image open self file im thumbna
  • MYSQLi 错误:用户已经拥有超过“max_user_connections”的活动连接[重复]

    这个问题在这里已经有答案了 我正在运行的网站上出现以下错误 我不明白为什么会这样 因为它在我的本地主机上运行良好 跟楼主有关系吗 我在 Unix 服务器上 Warning mysqli mysqli mysqli mysqli 42000
  • NodeJS 将 Int16Array 二进制缓冲区转换为 Google Speech API 的 LINEAR16 编码原始流

    我正在尝试在节点服务器中将语音转换为文本 其中使用 AudioContext 在浏览器中进行语音录制 我能够通过binaryType arraybuffer的WebSocket连接将int16Array缓冲区 记录的数据 发送到我的节点服务
  • 从列号获取 Excel 样式的列名称

    这是在提供行和列 ID 时提供列名称的 代码 但当我给出如下值时row 1 and col 104 它应该返回CZ 但它返回D row 1 col 104 div col column label str while div div mod
  • 如何从左到右移动uiview,反之亦然

    您好 我正在开发一个应用程序 我为一个视图制作了从左到右 从右到左移动的动画 并更改该视图中包含的标签的值 但是当我单击左或右按钮时 该视图将被删除新视图覆盖旧视图 所以我不想覆盖 只是我想添加新视图 我的代码是 void centerAn
  • 文本文件的行数

    我正在尝试创建一个函数 它接受文件名 即 data txt 并生成该文件的行数 data txt 24 42 45 54 67 76 89 98 12 21 99 99 33 33 下面的代码是我尝试构建一个函数 该函数接受文件名 data
  • mongoose 和 mongoJS 有什么区别?我应该使用哪个?

    我只是想知道 mongoose 和 mongoJS 有什么区别 那么 如果我们使用 mongoose 或 mongoJS 有何优点和缺点 因为我们知道连接 NodeJS 和 MongoDB 有很多依赖关系 例如猫鼬和 mongoJS Mon
  • 如何从 HTML 文件中提取元标签并在 SOLR 和 TIKA 中对其进行索引

    我正在尝试提取 HTML 文件的元标签 并通过 tika 集成将它们索引到 solr 中 我无法使用 Tika 提取这些元标记 也无法在 solr 中显示 我的 HTML 文件看起来像这样
  • 嵌套对象的默认值

    假设我有以下提供默认值的对象 default values a 0 b 0 c aa 0 bb 0 我还有另一个对象可以覆盖其中一些默认值 override values a 5 c aa 5 我想要的是将这两个对象结合起来 从而产生 co