在JavaScript中,我们可以使用不同的方法来对数组对象进行去重。下面我将介绍几种比较常用的方法。
1. 使用Set数据结构
Set是ES6中引入的新的数据结构,它类似于数组,但是其成员的值都是*的。我们可以使用Set来实现数组对象的去重。
```javascript
let arr = [{name: 'Tom'
age: 20}
{name: 'Jerry'
age: 30}
{name: 'Tom'
age: 20}];
let uniqueArr = Array.from(new Set(arr.map(JSON.stringify))).map(JSON.parse);
console.log(uniqueArr);
// 输出:[{name: 'Tom'
age: 20}
{name: 'Jerry'
age: 30}]
```
上述代码中,我们首先通过map方法将数组对象转换为字符串,然后通过Set数据结构去重,再通过Array.from方法将Set转换为数组,*通过map方法将字符串转换为对象。
2. 使用reduce方法
reduce方法是数组的归并方法,我们可以使用reduce方法遍历数组并利用一个新的数组来存储没有重复的对象。
```javascript
let arr = [{name: 'Tom'
age: 20}
{name: 'Jerry'
age: 30}
{name: 'Tom'
age: 20}];
let uniqueArr = arr.reduce((result
current) => {
let exist = result.find(item => item.name === current.name && item.age === current.age);
if (!exist) {
result.push(current);
}
return result;
}
[]);
console.log(uniqueArr);
// 输出:[{name: 'Tom'
age: 20}
{name: 'Jerry'
age: 30}]
```
上述代码中,我们遍历数组并查找新数组中是否已经存在相同的对象,如果不存在,则将当前对象添加到新数组中。
3. 使用filter方法
filter方法是数组的过滤方法,我们可以通过filter方法筛选出数组中的*对象。
```javascript
let arr = [{name: 'Tom'
age: 20}
{name: 'Jerry'
age: 30}
{name: 'Tom'
age: 20}];
let uniqueArr = arr.filter((value
index
array) => {
return array.findIndex(item => item.name === value.name && item.age === value.age) === index;
});
console.log(uniqueArr);
// 输出:[{name: 'Tom'
age: 20}
{name: 'Jerry'
age: 30}]
```
上述代码中,我们使用filter方法筛选出*次出现的对象,即找到与当前对象属性相同的*个对象。
4. 使用对象的属性和JSON序列化
我们可以将数组对象转换为字符串进行去重。如果对象的属性值都相同,则它们的字符串表示也是相同的。
```javascript
let arr = [{name: 'Tom'
age: 20}
{name: 'Jerry'
age: 30}
{name: 'Tom'
age: 20}];
let uniqueArr = Array.from(new Set(arr.map(JSON.stringify))).map(JSON.parse);
console.log(uniqueArr);
// 输出:[{name: 'Tom'
age: 20}
{name: 'Jerry'
age: 30}]
```
上述代码中,我们首先通过map方法将数组对象转换为字符串,然后通过Set数据结构去重,再通过Array.from方法将Set转换为数组,*通过map方法将字符串转换为对象。
总结:
以上就是几种常用的方法来对数组对象进行去重的方式。使用Set数据结构是效率较高的一种方法,它可以避免使用循环判断对象相等的问题。而使用reduce、filter等方法则需要进行循环判断。在实际应用中,可以根据具体的场景选择合适的方法来进行数组对象的去重。