JavaScript数组去重方法总结
需积分: 3 183 浏览量
更新于2024-08-30
收藏 66KB PDF 举报
"这篇JavaScript学习笔记主要探讨了如何在JavaScript中进行数组去重,通过不同的方法来实现这一功能。文章提供了实例代码和简单的性能测试,适用于正在学习JavaScript数组操作的朋友参考学习。"
在JavaScript中,数组去重是一个常见的需求,尤其是在处理数据过滤或优化存储时。以下是几种常见的JavaScript数组去重方法:
1. 双重循环去重:
这是最基础的去重方法,使用两个嵌套的for循环。外层循环遍历原数组,内层循环对比新数组(用于存储去重后的元素)。如果找到相同的元素,就跳过当前循环,否则将元素添加到新数组中。这种方法虽然直观,但效率较低,不推荐在大数据量时使用。
```javascript
Array.prototype.unique1 = function() {
var newArray = [this[0]];
for (var i = 1; i < this.length; i++) {
var repeat = false;
for (var j = 0; j < newArray.length; j++) {
if (this[i] == newArray[j]) {
repeat = true;
break;
}
}
if (!repeat) {
newArray.push(this[i]);
}
}
return newArray;
}
```
2. 利用Set数据结构:
ES6引入的Set数据结构可以方便地去除重复值,它内部的机制保证了所有成员都是唯一的。可以先将数组转换为Set,再转换回数组。
```javascript
var arr = [1, 2, 3, 4, 'a', 'b', 1, 3, 4, 56, 32, 34, 2, 'b', 'c', 5, '1', '2'];
var uniqueArr = [...new Set(arr)];
// [1, 2, 3, 4, "a", "b", 56, 32, 34, "c", 5, "1"]
```
3. 使用filter方法:
利用filter方法,结合indexOf或includes来检查元素是否已存在于新数组中。
```javascript
arr.filter((item, index, self) => self.indexOf(item) === index);
```
4. 使用reduce方法:
reduce方法可以将数组缩减成一个单一值,这里可以用来创建一个对象,利用对象属性的唯一性来达到去重的目的。
```javascript
arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []);
```
5. 使用Map数据结构:
Map同样可以保证键的唯一性,我们可以用元素作为键,值可以任意,这里设置为true即可。
```javascript
let map = new Map();
let uniqueArr = arr.filter(item => !map.has(item) && map.set(item, true));
```
性能测试显示,使用Set或Map进行去重通常比双重循环快得多,特别是在处理大量数据时。然而,实际应用中应根据具体场景选择合适的方法,例如要考虑兼容性和性能要求。
此外,除了上述方法,还可以通过ES6的findIndex、lodash库等工具来实现数组去重。学习JavaScript数组去重不仅有助于理解数据结构和算法,还能提高编程效率,为日常开发提供便利。
2021-10-09 上传
2020-10-16 上传
点击了解资源详情
2020-11-28 上传
2020-09-08 上传
2020-08-25 上传
2020-12-03 上传
2021-08-03 上传
2021-05-25 上传
weixin_38699784
- 粉丝: 5
- 资源: 954
最新资源
- phutbol_APITESTING:API测试
- git-course
- The-Utopian-Tree:计算树木在Spring和夏季生长周期中的高度
- spring-mybatis-jetty:基于Spring+Mybatis+Jetty实现简单的用户信息接口
- 管理系统系列--中医药管理系统后台.zip
- ProjetSiteRabaste
- 物联网智能家居方案-基于Nucleo-STM32L073&机智云-电路方案
- DataStructure-Algrithims:实现多种语言的DS和算法的存储库
- tuchong-daily-android:土冲日报安卓应用
- 基于opencv的水下图像增强与修复
- html5exercise
- 管理系统系列--智能广告机管理系统.zip
- SheenWood.github.io:ddfgfggdh
- mynewfavs
- 毕业设计分享-智能家居控制系统电路图&PCB图、程序-电路方案
- activemq-in-action:从 code.google.compactivemq-in-action 自动导出