# 对象默认值

使用 lodash _.defaults 为对象填充默认值

> 标准页面: https://elysiatools.com/zh/tools/defaults-object

- **分类:** Data Processing

- **关键词:** 默认值, 对象, lodash, 填充, 属性

## 概述

为目标对象的未定义属性分配默认值。

**亮点：**
- 使用 lodash `_.defaults`
- 只填充 undefined 属性
- 后面的来源会先应用

**示例：**
- 目标：`{"a":1}`
- 来源 1：`{"a":2,"b":2}`
- 结果：`{"a":1,"b":2}`

## 输入项

- **目标对象** (textarea): 输入目标 JSON 对象
- **来源 1** (textarea): 第一个来源对象
- **来源 2** (textarea): 可选的来源对象
- **来源 3** (textarea): 可选的来源对象

## 适用场景

- 需要为配置对象或数据对象设置一系列默认值，但不想覆盖已有的自定义设置时。
- 在合并多个数据源时，希望优先保留第一个对象（目标对象）的值，仅用后续对象填补缺失字段时。
- 处理 API 响应或用户输入数据，需要确保某些关键字段总有合理的后备值时。

## 工作原理

- 在“目标对象”输入框中，输入您要填充默认值的原始 JSON 对象。
- 在“来源 1”输入框中，输入包含默认值的第一个来源对象。此为必填项。
- 根据需要，在“来源 2”和“来源 3”输入框中添加更多来源对象（可选）。
- 工具将按顺序（来源1 -> 来源2 -> 来源3）将来源对象的属性应用到目标对象，仅填充目标对象中值为 `undefined` 的属性，最终输出合并后的结果。

## 使用案例

- 合并多层配置：将用户自定义配置、环境特定配置和全局默认配置安全地合并成一个最终配置对象。
- 数据初始化：为从数据库或 API 获取的数据记录填充缺失的默认状态或标志位。
- 表单预处理：在提交表单数据前，为可选的字段填充系统预设的默认值，确保数据结构的完整性。

## 常见问题

### 这个工具是做什么的？

它使用 lodash 的 `_.defaults` 方法，为一个目标对象填充来自其他来源对象的默认值，只填充目标对象中不存在（值为 `undefined`）的属性。

### 它和 `Object.assign` 有什么区别？

`Object.assign` 会直接覆盖目标对象的同名属性，而本工具使用的 `_.defaults` 只会在目标属性为 `undefined` 时才进行填充，能更好地保护目标对象的现有值。

### 如果提供了多个来源对象，合并顺序是怎样的？

合并顺序是从“来源 1”开始，然后是“来源 2”，最后是“来源 3”。但请注意，由于只填充 `undefined` 属性，靠后来源的值只有在前面所有来源都未提供该属性时才会生效。

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

不会。工具内部执行合并操作后，会生成并输出一个新的对象结果，您输入的原始 JSON 对象不会被改变。

### 它支持哪些数据类型？

输入和输出都必须是有效的 JSON 对象（即键值对集合）。对象的值可以是字符串、数字、布尔值、数组、嵌套对象等任何 JSON 支持的数据类型。

## 相关工具

- [对象赋值](https://elysiatools.com/zh/tools/assign-object): 使用 lodash _.assign 将来源属性赋给目标对象
- [填充数组](https://elysiatools.com/zh/tools/fill-array): 使用 lodash _.fill 从起始索引到结束索引用值填充数组
- [从键值对构建对象](https://elysiatools.com/zh/tools/from-pairs): 使用 lodash _.fromPairs 将键值对数组转换为对象
- [移除指定值](https://elysiatools.com/zh/tools/pull-values): 使用 lodash _.pull 从数组中移除指定值
- [排除指定值](https://elysiatools.com/zh/tools/without-values): 使用 lodash _.without 排除数组中的指定值
- [键值配对](https://elysiatools.com/zh/tools/zip-object): 使用 lodash _.zipObject 生成对象
- [数组压缩工具](https://elysiatools.com/zh/tools/compact-array): 使用 lodash _.compact 从数组中移除假值
- [按深度扁平化数组](https://elysiatools.com/zh/tools/flatten-depth-array): 使用 lodash _.flattenDepth 按指定深度扁平化数组

## 示例

- [Grafana 高级应用示例](https://elysiatools.com/zh/samples/grafana-samples): 全面的 Grafana 示例，涵盖高级仪表板设计、告警配置、数据源集成和插件开发
- [二维码示例](https://elysiatools.com/zh/samples/qrcode-samples): 用于测试二维码读取和生成工具的示例二维码图像
- [D3.js 数据可视化示例](https://elysiatools.com/zh/samples/d3js-data-visualization): 全面的D3.js数据可视化示例，包括图表、地图、动画和交互式可视化
- [Rome JavaScript 工具链示例](https://elysiatools.com/zh/samples/rome): Rome JavaScript 工具链示例，包括配置、代码检查、格式化、打包和项目管理
