js 数组对象根据字段去重
时间: 2023-09-09 20:09:51 浏览: 55
可以使用 reduce 方法和 Set 数据结构来实现:
```javascript
const arr = [
{ id: 1, name: 'foo' },
{ id: 2, name: 'bar' },
{ id: 3, name: 'foo' },
{ id: 4, name: 'baz' },
{ id: 5, name: 'bar' }
];
const uniqueArr = Array.from(
arr.reduce((map, obj) => map.set(obj.name, obj), new Map()).values()
);
console.log(uniqueArr); // [{ id: 1, name: 'foo' }, { id: 2, name: 'bar' }, { id: 4, name: 'baz' }]
```
上面的代码中,使用 reduce 方法将数组转化为 Map 对象,其中以 name 字段为键,对象本身为值。由于 Map 对象的键是唯一的,因此重复的项会被覆盖。最后,使用 Map 对象的 values 方法获取所有的值,再通过 Array.from 方法转化为数组即可得到去重后的结果。
相关问题
数组对象根据某个字段去重
可以使用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' }]
```
js根据某个字段去重
可以使用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。