# 按字段去重

使用 lodash _.uniqBy 按属性路径去重

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

- **分类:** Data Processing

- **关键词:** 数组, 去重, 字段, 路径, lodash

## 概述

使用属性路径为数组去重。

**亮点：**
- 使用 lodash `_.uniqBy`
- 支持属性路径（如 `id`、`meta.key`）
- 返回 JSON 格式的唯一值

**示例：**
- 数组：`[{"id": 1}, {"id": 1}, {"id": 2}]`
- 路径：`id`
- 结果：`[{"id": 1}, {"id": 2}]`

## 输入项

- **数组** (textarea): 输入 JSON 数组
- **属性路径** (text): 用于比较的属性路径

## 适用场景

- 当您需要根据对象中的某个特定字段（如 `id`、`email`）对数组进行去重时。
- 当处理包含嵌套属性的对象数组（如 `user.profile.name`），并希望基于该嵌套路径去重时。
- 当您需要快速清理数据中的重复记录，而无需编写任何代码时。

## 工作原理

- 在“数组”输入框中粘贴或输入您的 JSON 数组数据。
- 在“属性路径”输入框中指定用于判断重复的字段路径（例如 `id` 或 `address.city`）。
- 工具内部调用 lodash 的 `_.uniqBy` 函数，根据您提供的路径比较数组元素。
- 处理完成后，页面将直接显示去重后的 JSON 数组结果。

## 使用案例

- 清洗从 API 获取的用户列表，确保每个用户 ID 只出现一次。
- 处理前端表单提交的重复数据条目，例如根据邮箱地址去重。
- 分析日志数据时，根据事件类型或来源 IP 提取唯一值列表。

## 常见问题

### 属性路径支持嵌套对象吗？

支持。您可以使用点号分隔的路径，例如 `meta.userId` 或 `profile.contact.email`。

### 这个工具会修改我的原始数组吗？

不会。工具在处理时会创建一个新数组，您的原始输入数据不会被更改。

### 处理大型数组时性能如何？

工具依赖 lodash 库，对于常规大小的数组（数千条记录）处理速度很快。对于极大数量的数据，性能取决于您的浏览器和设备。

### 如果数组中的对象没有指定的路径会怎样？

lodash 的 `_.uniqBy` 会将没有该路径的对象视为 `undefined`，因此这些对象之间可能会被视为重复项。

### 它和直接使用 `new Set()` 有什么区别？

`new Set()` 适用于简单值数组（如字符串、数字）的去重。本工具专门用于对象数组，通过指定对象内部的某个属性值来进行去重判断。

## 相关工具

- [数组压缩工具](https://elysiatools.com/zh/tools/compact-array): 使用 lodash _.compact 从数组中移除假值
- [删除数组前N项](https://elysiatools.com/zh/tools/drop-items): 使用lodash _.drop删除数组的前N个元素
- [从右侧删除数组元素](https://elysiatools.com/zh/tools/drop-right-items): 使用 lodash 的 _.dropRight 从数组末尾删除 N 个元素
- [移除指定值](https://elysiatools.com/zh/tools/pull-values): 使用 lodash _.pull 从数组中移除指定值
- [排序去重](https://elysiatools.com/zh/tools/sorted-unique): 使用 lodash _.sortedUniq 为排序数组去重
- [排序按字段去重](https://elysiatools.com/zh/tools/sorted-unique-by): 使用 lodash _.sortedUniqBy 为排序数组按字段去重
- [数组去重](https://elysiatools.com/zh/tools/uniq-array): 使用 lodash _.uniq 为数组去重
- [排除指定值](https://elysiatools.com/zh/tools/without-values): 使用 lodash _.without 排除数组中的指定值

## 示例

- [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 工具链示例，包括配置、代码检查、格式化、打包和项目管理
