分类

深度默认值

使用 lodash _.defaultsDeep 应用深度默认值

为未定义属性递归分配默认值。

亮点:

  • 使用 lodash _.defaultsDeep
  • 深度应用到嵌套对象
  • 只填充 undefined 属性

示例:

  • 目标:{"a":{"b":1}}
  • 来源 1:{"a":{"b":2,"c":3}}
  • 结果:{"a":{"b":1,"c":3}}

输入目标 JSON 对象

第一个来源对象

可选的来源对象

可选的来源对象

关键信息

分类
Data Processing
输入类型
textarea
输出类型
text
样本覆盖
4
支持 API
Yes

概览

深度默认值工具基于 lodash 的 `_.defaultsDeep` 方法,用于递归地为一个目标对象填充来自一个或多个来源对象的默认值。它会深度遍历嵌套对象,仅当目标对象中的属性为 `undefined` 时,才会用来源对象中的对应值进行填充,确保目标对象的现有值不被覆盖。

适用场景

  • 需要合并多层嵌套的配置对象,且希望保留用户自定义配置的优先级时。
  • 为 API 响应或数据结构设置完整的默认值,避免访问深层属性时报错时。
  • 处理用户输入或表单数据,需要与一套完整的默认设置进行深度合并时。

工作原理

  • 输入一个“目标对象”和一个或多个“来源对象”。
  • 工具内部调用 lodash 的 `_.defaultsDeep` 函数进行递归合并。
  • 合并逻辑为:仅当目标对象中某个路径的值为 `undefined` 时,才会将来源对象中对应路径的值赋给它。
  • 输出合并后的完整对象,目标对象的原始值始终优先。

使用场景

前端项目配置管理:合并用户自定义的主题配置与框架的默认主题配置。
后端 API 数据补全:为从数据库查询出的不完整数据对象,补全所有必需的字段默认值。
数据处理流水线:在数据处理步骤间,确保数据结构始终包含所有预期的字段,即使某些步骤未生成它们。

用户案例

1. 合并前端主题配置

前端开发者
背景原因
开发一个可定制主题的组件库,用户可能只修改部分颜色,其他样式需使用默认值。
解决问题
需要将用户传入的局部配置与完整的默认配置深度合并,生成最终配置。
如何使用
将默认主题对象作为“目标对象”,将用户自定义配置对象作为“来源1”进行合并。
示例配置
目标对象:{"theme":{"primary":"#007bff","secondary":"#6c757d","font":{"size":"16px","family":"Arial"}}}
来源1:{"theme":{"primary":"#ff5722","font":{"family":"Helvetica"}}}
效果
得到合并后的配置:{"theme":{"primary":"#ff5722","secondary":"#6c757d","font":{"size":"16px","family":"Helvetica"}}}。用户的自定义值(主色、字体)覆盖了默认值,而未定义的次要颜色和字体大小则保留了默认值。

2. 补全 API 响应数据

背景原因
从外部 API 获取的用户资料数据可能不完整,某些可选字段可能缺失,但前端组件需要完整的数据结构来渲染。
解决问题
需要为 API 返回的 JSON 数据补全所有缺失字段的默认值,防止渲染错误。
如何使用
将 API 返回的数据对象作为“目标对象”,将一个包含所有字段及默认值的模板对象作为“来源1”。
示例配置
目标对象:{"id":123,"name":"张三","profile":{"avatar":"url.jpg"}}
来源1:{"id":0,"name":"未知","profile":{"avatar":"default.jpg","bio":"","location":""},"settings":{"notifications":true}}
效果
得到完整的数据对象:{"id":123,"name":"张三","profile":{"avatar":"url.jpg","bio":"","location":""},"settings":{"notifications":true}}。API 返回的 `id`、`name`、`avatar` 被保留,缺失的 `bio`、`location` 和整个 `settings` 对象被补全。

3. 多环境配置管理

背景原因
应用程序有基础配置,以及针对开发、测试、生产等不同环境的特定配置。需要生成最终配置。
解决问题
需要将基础配置与特定环境的配置深度合并,环境配置优先,缺失项则使用基础配置。
如何使用
将基础配置作为“目标对象”,将特定环境(如生产环境)的配置作为“来源1”。
示例配置
目标对象:{"api":{"baseUrl":"http://localhost:3000","timeout":5000},"debug":true,"logLevel":"verbose"}
来源1:{"api":{"baseUrl":"https://api.prod.example.com"},"debug":false}
效果
得到生产环境的最终配置:{"api":{"baseUrl":"https://api.prod.example.com","timeout":5000},"debug":false,"logLevel":"verbose"}。环境配置覆盖了 `api.baseUrl` 和 `debug`,而 `api.timeout` 和 `logLevel` 则继承自基础配置。

用 Samples 测试

json

相关专题

常见问题

这个工具是做什么的?

它递归地将多个来源对象的默认值填充到目标对象中,只填充目标对象里值为 `undefined` 的属性。

它和普通的对象合并(浅合并)有什么区别?

普通合并会覆盖同名属性。此工具是“深度默认”,只填充 `undefined` 的属性,能处理嵌套对象,且目标对象的值永远优先。

它会如何处理数组?

根据 lodash `_.defaultsDeep` 的行为,数组会被视为普通值进行合并,不会递归合并数组内的元素。

这个工具会修改我输入的原始对象吗?

不会。工具返回的是一个合并后的新对象,您的原始输入对象保持不变。

最多可以添加几个来源对象?

工具界面支持最多三个来源对象(来源1、来源2、来源3),其中来源2和来源3是可选的。

API 文档

请求端点

POST /zh/api/tools/defaults-deep

请求参数

参数名 类型 必填 描述
targetObject textarea 输入目标 JSON 对象
source1 textarea 第一个来源对象
source2 textarea 可选的来源对象
source3 textarea 可选的来源对象

响应格式

{
  "result": "Processed text content",
  "error": "Error message (optional)",
  "message": "Notification message (optional)",
  "metadata": {
    "key": "value"
  }
}
文本: 文本

AI MCP 文档

将此工具添加到您的 MCP 服务器配置中:

{
  "mcpServers": {
    "elysiatools-defaults-deep": {
      "name": "defaults-deep",
      "description": "使用 lodash _.defaultsDeep 应用深度默认值",
      "baseUrl": "https://elysiatools.com/mcp/sse?toolId=defaults-deep",
      "command": "",
      "args": [],
      "env": {},
      "isActive": true,
      "type": "sse"
    }
  }
}

你可以串联多个工具,比如:`https://elysiatools.com/mcp/sse?toolId=png-to-webp,jpg-to-webp,gif-to-webp`,最多20个。

如果遇见问题,请联系我们:[email protected]