# 按键计数

使用 lodash _.countBy 按派生键计数

> 标准页面: https://elysiatools.com/zh/tools/count-by

- **分类:** Data Processing

- **关键词:** 计数, 分组, lodash, 集合, 对象

## 概述

按派生键统计集合中的元素数量。

**亮点：**
- 使用 lodash `_.countBy`
- 支持 JSON 数组或对象
- 支持 identity 或属性/路径迭代器

**示例：**
- 集合：`[{"type":"a"},{"type":"b"},{"type":"a"}]`
- 迭代器：`type`
- 结果：`{"a":2,"b":1}`

## 输入项

- **集合** (textarea): 输入 JSON 数组或对象
- **迭代器类型** (select)
- **迭代器** (text): 使用属性迭代器时的属性名或路径

## 适用场景

- 需要快速统计一个 JSON 数组中，某个字段值出现的次数时。
- 分析数据分布，例如统计不同类别、状态或标签的数量时。
- 处理 API 返回的列表数据，需要按某个属性进行汇总计数时。

## 工作原理

- 在“集合”输入框中粘贴或输入一个有效的 JSON 数组或对象。
- 选择迭代器类型：“原样”直接对元素计数，“属性/路径”则按指定字段计数。
- 如果选择了“属性/路径”，在“迭代器”输入框中填写要计数的属性名或路径（如 `type` 或 `user.id`）。
- 工具将调用 lodash 的 `_.countBy` 函数处理输入，并返回一个以派生键为属性、计数为值的 JSON 对象。

## 使用案例

- 统计产品列表中各“category”（类别）的产品数量。
- 分析用户行为日志，计算不同“action”（操作）的发生频率。
- 汇总调查问卷结果，按“answer”（答案选项）统计选择人数。

## 常见问题

### 这个工具支持哪些输入数据类型？

支持标准的 JSON 数组或 JSON 对象。

### “原样”和“属性/路径”迭代器有什么区别？

“原样”直接对集合中的每个元素本身进行计数；“属性/路径”则提取每个元素的指定属性值作为计数键。

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

输出是一个 JSON 对象，其键是派生出的计数依据，值是该键在集合中出现的次数。

### 这个工具能处理多大的数据量？

作为浏览器端工具，处理能力受浏览器内存限制。对于超大型数据集（如数百万条），建议在后端处理。

### 如果输入格式错误会怎样？

工具会提示输入的 JSON 无效，请检查并修正您的 JSON 字符串格式。

## 相关工具

- [查找键](https://elysiatools.com/zh/tools/find-key): 使用 lodash _.findKey 查找第一个匹配的键
- [路径取值](https://elysiatools.com/zh/tools/get-path): 使用 lodash _.get 按路径取值
- [按键分组](https://elysiatools.com/zh/tools/group-by): 使用 lodash _.groupBy 按派生键分组
- [按值反转](https://elysiatools.com/zh/tools/invert-by): 使用 lodash _.invertBy 按值分组反转
- [按条件移除](https://elysiatools.com/zh/tools/remove-by-predicate): 使用 lodash _.remove 按条件移除数组元素
- [取前几项](https://elysiatools.com/zh/tools/take-items): 使用 lodash _.take 获取数组前 N 项
- [按条件取前缀](https://elysiatools.com/zh/tools/take-while): 使用 lodash _.takeWhile 按条件取前缀项
- [数组压缩](https://elysiatools.com/zh/tools/zip-arrays): 使用 lodash _.zip 按索引合并数组

## 示例

- [Grafana 高级应用示例](https://elysiatools.com/zh/samples/grafana-samples): 全面的 Grafana 示例，涵盖高级仪表板设计、告警配置、数据源集成和插件开发
- [二维码示例](https://elysiatools.com/zh/samples/qrcode-samples): 用于测试二维码读取和生成工具的示例二维码图像
- [Postman Collections - API 测试](https://elysiatools.com/zh/samples/postman-collections): 全面的 Postman collection 示例，包括 API 测试、自动化脚本、环境变量、mock 服务器和 REST API 的高级测试模式
- [D3.js 数据可视化示例](https://elysiatools.com/zh/samples/d3js-data-visualization): 全面的D3.js数据可视化示例，包括图表、地图、动画和交互式可视化
