# 遍历对象

使用 lodash _.forIn 遍历对象属性

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

- **分类:** Data Processing

- **关键词:** forIn, 对象, lodash, 遍历, 条目

## 概述

遍历对象自身和继承的可枚举属性。

**亮点：**
- 使用 lodash `_.forIn`
- 包含继承的可枚举属性
- 返回按顺序排列的键值列表

**示例：**
- 对象：`{"a":1,"b":2}`
- 结果：`[{"key":"a","value":1},{"key":"b","value":2}]`

## 输入项

- **对象** (textarea): 输入 JSON 对象

## 适用场景

- 当您需要遍历一个对象的所有属性，包括从原型链继承的可枚举属性时。
- 当您需要将对象的键值对转换为一个有序的数组列表，以便进行映射、过滤或日志输出时。
- 当您处理一个结构复杂或包含继承关系的对象，并希望一次性获取其所有可枚举条目时。

## 工作原理

- 在输入框中粘贴或输入一个有效的 JSON 对象。
- 工具内部调用 lodash 的 `_.forIn` 函数对该对象进行遍历。
- 遍历过程会收集对象自身及原型链上的所有可枚举属性。
- 最终输出一个包含 `{key, value}` 对象的数组，顺序与遍历顺序一致。

## 使用案例

- 数据转换：将从 API 获取的对象数据快速转换为前端组件（如表格、列表）所需的键值对数组格式。
- 调试与分析：在开发过程中，快速查看一个复杂对象（可能包含继承属性）的所有可枚举条目，用于调试或理解数据结构。
- 配置合并：遍历默认配置对象和用户自定义配置对象，将它们的属性合并到一个新的数组中进行对比或处理。

## 常见问题

### 这个工具和 JavaScript 的 `for...in` 循环有什么区别？

核心功能相似，都用于遍历对象的可枚举属性（包括继承的）。本工具将结果直接整理成结构化的键值对数组，省去了手动收集的步骤。

### 它只遍历对象自身的属性吗？

不是。它会遍历对象自身以及其原型链上所有可枚举的属性，这与 `for...in` 循环的行为一致。

### 输出结果是什么格式？

输出是一个 JSON 数组，每个元素是一个对象，包含 `key` 和 `value` 两个字段，分别对应属性的键名和值。

### 可以处理嵌套对象吗？

可以。它会遍历顶层对象的所有可枚举属性。如果某个属性的值本身也是一个对象，该值会作为 `value` 字段的内容被完整输出，但不会递归遍历其内部属性。

### 这个工具的性能如何？

对于常规大小的对象，处理速度很快。其性能主要取决于对象的属性数量和复杂度，与原生 `for...in` 循环的性能开销相当。

## 相关工具

- [对象继承赋值](https://elysiatools.com/zh/tools/assign-in-object): 使用 lodash _.assignIn 分配自有和继承属性
- [深度默认值](https://elysiatools.com/zh/tools/defaults-deep): 使用 lodash _.defaultsDeep 应用深度默认值
- [遍历自有属性](https://elysiatools.com/zh/tools/for-own): 使用 lodash _.forOwn 遍历对象自有属性
- [继承键列表](https://elysiatools.com/zh/tools/keys-in-list): 使用 lodash _.keysIn 获取键列表
- [键列表](https://elysiatools.com/zh/tools/keys-list): 使用 lodash _.keys 获取键列表
- [按键计数](https://elysiatools.com/zh/tools/count-by): 使用 lodash _.countBy 按派生键计数
- [查找键](https://elysiatools.com/zh/tools/find-key): 使用 lodash _.findKey 查找第一个匹配的键
- [路径取值](https://elysiatools.com/zh/tools/get-path): 使用 lodash _.get 按路径取值

## 示例

- [二维码示例](https://elysiatools.com/zh/samples/qrcode-samples): 用于测试二维码读取和生成工具的示例二维码图像
- [Grafana 高级应用示例](https://elysiatools.com/zh/samples/grafana-samples): 全面的 Grafana 示例，涵盖高级仪表板设计、告警配置、数据源集成和插件开发
- [分布式追踪示例](https://elysiatools.com/zh/samples/distributed-tracing-samples): 使用 Jaeger、OpenTelemetry 和其他现代可观测性工具的综合分布式追踪示例，适用于微服务架构
- [ELK Stack 日志分析示例](https://elysiatools.com/zh/samples/elk-stack-samples): 全面的 ELK Stack（Elasticsearch、Logstash、Kibana）示例，用于分布式系统中的日志聚合、处理和可视化
