js数组根据某个对象值去重
时间: 2023-07-02 21:10:43 浏览: 104
可以使用reduce方法和Map数据结构实现根据某个对象值去重。
例如,假设有如下数组:
```javascript
const arr = [
{ id: 1, name: 'foo' },
{ id: 2, name: 'bar' },
{ id: 1, name: 'baz' },
{ id: 3, name: 'qux' },
{ id: 2, name: 'quux' },
];
```
现在我们想要根据id值去重,可以使用reduce方法和Map数据结构实现:
```javascript
const uniqueArr = arr.reduce((acc, cur) => {
acc.has(cur.id) || acc.set(cur.id, cur);
return acc;
}, new Map()).values();
console.log([...uniqueArr]); // [{ id: 1, name: 'foo' }, { id: 2, name: 'bar' }, { id: 3, name: 'qux' }]
```
上面的代码中,我们首先创建了一个新的Map实例作为reduce方法的初始值,然后对于数组中的每个元素,如果Map中不存在该元素的id属性,就将其添加到Map中。由于Map的键是唯一的,因此这样就实现了根据id去重的效果。最后,我们使用Map的values方法获取去重后的对象集合,并使用扩展运算符将其转换为数组。
相关问题
js数组对象根据某个属性去重
可以使用reduce方法和Map数据结构来实现根据某个属性去重。例如,如果要根据对象数组中的某个属性name去重,可以这样写:
```javascript
const arr = [
{ id: 1, name: 'foo' },
{ id: 2, name: 'bar' },
{ id: 3, name: 'foo' },
{ id: 4, name: 'baz' },
{ id: 5, name: 'bar' }
];
const map = new Map();
const result = arr.reduce((acc, cur) => {
if (!map.has(cur.name)) {
map.set(cur.name, true); // set any value to Map
acc.push(cur);
}
return acc;
}, []);
console.log(result);
// Output: [{ id: 1, name: 'foo' }, { id: 2, name: 'bar' }, { id: 4, name: 'baz' }]
```
在这个例子中,我们通过reduce方法遍历原始数组,并使用Map数据结构来记录已经出现过的name,如果当前遍历到的对象的name还没有出现过,就将它加入结果数组中。最终的结果就是一个根据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' }]
```
阅读全文