js对象数组去重

2024-09-28 14:26:58 9 Admin
高端网站定制

 

在JavaScript中,我们经常会遇到需要对对象数组进行去重的情况。对象数组去重指的是将数组中重复的对象去除,只保留其中一个副本。对象数组去重的实现方法有很多种,可以使用循环遍历、利用Set、利用Map等方式来实现。下面将介绍几种常见的对象数组去重方法。

 

一、利用循环遍历实现对象数组去重

 

利用循环遍历的方法是比较传统的一种实现方式,其基本原理是遍历对象数组,将其中的每一个对象与一个新的数组进行比较,如果新的数组中不存在该对象则添加到新的数组中。

 

示例代码如下:

 

```javascript

function uniqueArray(arr) {

const result = [];

arr.forEach(obj => {

const index = result.findIndex(item => JSON.stringify(item) === JSON.stringify(obj));

if (index === -1) {

result.push(obj);

}

});

return result;

}

 

const data = [

{ id: 1

name: 'Alice' }

 

{ id: 2

name: 'Bob' }

 

{ id: 1

name: 'Alice' }

 

];

 

console.log(uniqueArray(data));

```

 

上述代码中,uniqueArray函数用于去重对象数组,其中利用forEach方法遍历原数组,然后利用findIndex方法和JSON.stringify判断新数组中是否已存在该对象,最终实现了对象数组的去重。

 

二、利用Set实现对象数组去重

 

利用Set数据结构是另一种实现对象数组去重的常见方式,Set是一种集合数据结构,保证集合中的元素*。

 

示例代码如下:

 

```javascript

function uniqueArrayWithSet(arr) {

const result = [...new Set(arr.map(obj => JSON.stringify(obj)))].map(str => JSON.parse(str));

return result;

}

 

const data = [

{ id: 1

name: 'Alice' }

 

{ id: 2

name: 'Bob' }

 

{ id: 1

name: 'Alice' }

 

];

 

console.log(uniqueArrayWithSet(data));

```

 

上述代码中,uniqueArrayWithSet函数利用Set和map方法实现了对象数组去重,首先将对象数组转换为字符串数组后再利用Set进行去重,*再将字符串数组转换为对象数组。

 

三、利用Map实现对象数组去重

 

利用Map数据结构也可以实现对象数组去重,Map是一种键值对数据结构,它的键是*的。

 

示例代码如下:

 

```javascript

function uniqueArrayWithMap(arr) {

const map = new Map();

arr.forEach(obj => {

map.set(JSON.stringify(obj)

obj);

});

const result = Array.from(map.values());

return result;

}

 

const data = [

{ id: 1

name: 'Alice' }

 

{ id: 2

name: 'Bob' }

 

{ id: 1

name: 'Alice' }

 

];

 

console.log(uniqueArrayWithMap(data));

```

 

上述代码中,uniqueArrayWithMap函数利用Map数据结构实现了对象数组去重,将对象转换为键值对后存入Map中,*再将Map中的值转换为数组即可。

 

总结

 

以上介绍了利用循环遍历、Set、Map等方式实现对象数组去重的几种常见方法,不同的实现方式各有优缺点,开发者可以根据具体情况选择适合的方式来进行对象数组去重。在实际开发中,建议通过性能测试来选取*的实现方式,以提高程序的性能和效率。希望本文对您有所帮助,谢谢阅读!

Copyright © 悉地网 2018-2024.All right reserved.Powered by XIDICMS 备案号:苏ICP备18070416号-1