js reduce通过对象属性去重
时间: 2023-08-31 12:09:52 浏览: 90
你可以使用`reduce`函数和一个空对象来通过对象属性去重。下面是一个示例代码:
```javascript
const data = [
{ id: 1, name: 'John' },
{ id: 2, name: 'Jane' },
{ id: 3, name: 'John' },
{ id: 4, name: 'Jane' }
];
const uniqueData = data.reduce((acc, obj) => {
const key = obj.name;
if (!acc[key]) {
acc[key] = obj;
}
return acc;
}, {});
const result = Object.values(uniqueData);
console.log(result);
```
在上面的代码中,`reduce`函数用于遍历数组`data`,并将每个对象的`name`属性作为键来存储在`acc`对象中。如果该属性在`acc`对象中不存在,说明该对象是唯一的,我们将其存储在`acc`对象中。最后,通过`Object.values`获取所有唯一的对象组成的数组。
运行上述代码,你会得到以下输出:
```
[
{ id: 1, name: 'John' },
{ id: 2, name: 'Jane' }
]
```
这样,你就成功通过对象属性去重了。
相关问题
js数组对象属性去重
在JavaScript中,数组对象属性去重可以采用多种方法,这里列举几种常见的:
1. **Set数据结构**:
使用Set集合,因为Set不允许有重复元素。首先将数组转换为Set,然后再转回数组即可实现去重:
```javascript
let arr = [...new Set(arr)];
```
2. **双重循环**:
利用两个嵌套循环,检查每个元素是否已经在新数组中,如果未找到则添加:
```javascript
let uniqueArr = [];
for(let i = 0; i < arr.length; i++) {
if(uniqueArr.indexOf(arr[i]) === -1) {
uniqueArr.push(arr[i]);
}
}
```
3. **filter方法**:
通过filter函数配合indexOf或者includes方法,过滤出不存在于其他位置的新数组:
```javascript
let uniqueArr = arr.filter((value, index, self) => {
return self.indexOf(value) === index;
});
```
4. **reduce方法**:
利用reduce方法迭代数组,并检查当前元素是否已经存在于结果数组中:
```javascript
let uniqueArr = arr.reduce((acc, cur) => acc.includes(cur) ? acc : [...acc, cur], []);
```
5. **利用Map或JSON.stringify**:
如果允许稍微复杂的操作,还可以用Map存储数组元素,Map键值对不能重复,然后转化为数组:
```javascript
let uniqueArr = Array.from(new Map(arr.map(JSON.stringify)));
```
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去重后的新数组。
阅读全文