前端如何去重数组对象
时间: 2023-06-22 08:20:25 浏览: 97
前端去重数组对象可以通过以下几种方法实现:
1. 使用Set数据结构:将数组转成Set集合,再将Set集合转回数组即可去重。需要注意的是,Set中比较对象是否相等是根据对象的引用地址进行比较的,因此需要重写对象的equals方法来比较对象的属性值是否相等。
2. 使用reduce函数:利用reduce函数遍历数组,将每个元素添加到结果数组中,如果结果数组中已经存在相同的元素,则不添加。
3. 使用filter函数:使用filter函数遍历数组,对每个元素使用findIndex函数查找是否已经存在相同元素,如果不存在则返回该元素。
下面是一个使用Set数据结构去重的例子:
```javascript
const arr = [{id: 1, name: 'Tom'}, {id: 2, name: 'Jerry'}, {id: 1, name: 'Tom'}];
const result = Array.from(new Set(arr.map(item => JSON.stringify(item)))).map(item => JSON.parse(item));
console.log(result); // [{id: 1, name: 'Tom'}, {id: 2, name: 'Jerry'}]
```
这里使用了JSON.stringify和JSON.parse方法将对象转成字符串再转回对象,以便使用Set集合去重。
相关问题
前端es6 数组去重
ES6 中数组去重有多种方法,这里列举几种常见的:
1. **Set** 集合法:利用 Set 数据结构的特点,它不允许有重复元素,可以将数组转换为 Set,然后再转回数组,实现了去重。
```javascript
let arr = [1, 2, 2, 3, 4, 4];
let uniqueArr = [...new Set(arr)];
```
2. **filter + Array.from** 法:通过 filter 过滤出唯一值,再用 Array.from 转换为数组。
```javascript
let arr = [1, 2, 2, 3, 4, 4];
let uniqueArr = Array.from(new Map(arr.map(item => [item, item])));
```
3. **reduce** 法:使用 reduce 函数迭代数组,根据当前元素和累加器的状态来判断是否需要添加到新数组中。
```javascript
let arr = [1, 2, 2, 3, 4, 4];
let uniqueArr = arr.reduce((acc, cur) => acc.includes(cur) ? acc : [...acc, cur], []);
```
4. **JSON.stringify + JSON.parse** 法:将数组序列化成字符串,然后解析为新的数组,适用于基本类型的数组。
```javascript
let arr = [1, 2, 2, 3, 4, 4];
let uniqueArr = JSON.parse(JSON.stringify(new Set(arr)));
```
注意这种方法对复杂对象无效。
前端filter对象数组去重
可以使用 Set 数据结构和 Array.from() 方法来实现数组去重。
```javascript
const arr = [{name: 'Alice'}, {name: 'Bob'}, {name: 'Alice'}];
const uniqueArr = Array.from(new Set(arr.map(item => JSON.stringify(item))))
.map(item => JSON.parse(item));
console.log(uniqueArr); // [{name: 'Alice'}, {name: 'Bob'}]
```
上述代码中,先使用 map() 方法将对象数组转换为字符串数组,然后使用 Set 数据结构去重,最后使用 map() 方法将字符串数组转换为对象数组。注意,在将对象转换为字符串时,需要使用 JSON.stringify() 方法,否则无法去重。在将字符串转换为对象时,需要使用 JSON.parse() 方法。
阅读全文