js数组根据某字段去重
时间: 2024-12-24 16:41:33 浏览: 4
restaurantsorting:假设您得到一个从搜索算法返回的排序餐厅的 JSON 数组。 该列表已按距给定点的距离排序。 此列表可能包含相同的连锁餐厅,但具有多个不同的位置
在JavaScript中,如果你有一个包含对象的数组,你想根据某个字段(比如`id`、`name`等)对数组进行去重,你可以采用多种方法:
1. **基于哈希表** (ES6+):
使用Set数据结构,它不允许有重复元素。先将所有对象的特定字段值作为键转换成一个新的Set,然后返回原数组长度与新Set长度相减的结果。
```javascript
function uniqueBy(arr, field) {
return [...new Set(arr.map(item => item[field]))];
}
```
例如:
```javascript
let arr = [{id: 1}, {id: 2}, {id: 1}, {id: 3}];
let uniqueArr = uniqueBy(arr, 'id');
```
2. **传统循环**:
通过双重循环遍历数组,如果发现两个对象的指定字段值相等,则删除其中一个。
```javascript
function uniqueArrayByObject(arr, field) {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (!result.some(obj => obj[field] === arr[i][field])) {
result.push(arr[i]);
}
}
return result;
}
```
3. **使用lodash/fp库** (如果项目中引入了这个库):
Lodash有一个函数叫`_.uniqBy`,可以简化上述过程。
```javascript
import _ from 'lodash';
let uniqueArr = _.uniqBy(arr, 'id');
```
阅读全文