js根据某个字段去重
时间: 2023-07-02 18:08:03 浏览: 46
可以使用ES6的Set数据结构和Array的filter方法来实现根据某个字段去重:
假设数据格式为:
```javascript
const data = [
{id: 1, name: 'Alice'},
{id: 2, name: 'Bob'},
{id: 3, name: 'Charlie'},
{id: 1, name: 'David'},
{id: 2, name: 'Eve'},
];
```
现在要根据id字段去重,可以这样写:
```javascript
const uniqueData = Array.from(new Set(data.map(item => item.id)))
.map(id => {
return data.find(item => item.id === id);
});
```
这里先使用map方法将所有的id取出来,然后使用Set数据结构去重,再使用map方法根据id去找到对应的原对象,最后得到一个去重后的数组uniqueData。
相关问题
js根据某个字段去重高效率的方法
可以使用哈希表(Hash Table)来实现根据某个字段去重的高效率方法。
具体步骤如下:
1. 定义一个空的哈希表对象。
2. 遍历需要去重的数组,对于每个元素,取出其需要去重的字段值作为哈希表的键值,将该元素保存到哈希表中。
3. 哈希表的键值是唯一的,因此重复的元素只会被保存一次,从而实现了去重。
4. 最后,将哈希表的所有值转换为数组返回即可。
以下是代码示例:
```javascript
function uniqueByField(arr, field) {
const map = new Map();
for (const item of arr) {
const key = item[field];
if (!map.has(key)) {
map.set(key, item);
}
}
return Array.from(map.values());
}
```
使用示例:
```javascript
const arr = [
{id: 1, name: '张三'},
{id: 2, name: '李四'},
{id: 3, name: '张三'},
{id: 4, name: '王五'},
{id: 5, name: '李四'}
];
const uniqueArr = uniqueByField(arr, 'name');
console.log(uniqueArr);
// 输出:[
// {id: 1, name: '张三'},
// {id: 2, name: '李四'},
// {id: 4, name: '王五'}
// ]
```
数组对象根据某个字段去重
可以使用reduce和Map来实现根据某个字段去重的功能。具体实现如下:
```javascript
const arr = [
{ id: 1, name: 'apple' },
{ id: 2, name: 'banana' },
{ id: 3, name: 'apple' },
{ id: 4, name: 'orange' },
{ id: 5, name: 'banana' }
];
const result = Array.from(arr.reduce((map, obj) => {
if (!map.has(obj.name)) map.set(obj.name, obj);
return map;
}, new Map()).values());
console.log(result);
// [{ id: 1, name: 'apple' }, { id: 2, name: 'banana' }, { id: 4, name: 'orange' }]
```