javascript数组去重 - 效率测试

数组去重,前端面试酷爱的问题,问题简单而又能看出一个程序员对计算机程序执行过程的理解如何。

数组去重的方法有很多,到底哪种是最理想的,我不清楚。于是我测试了下数组去重的效率。测试二十万个数据,随着数据越多效率很明显的就体验了出来。

以下是我针对网上三种高效率方法总结与效率测试,不喜勿喷O(∩_∩)O~~

数组去重法1:

 1 Array.prototype.unique1 = function(){
 2     console.time("数组去重法1");     //记录开始执行的时间
 3     var arr = [];     //创建一个临时数组
 4     var obj = {};     //创建一个空对象
 5     for(var i = 0; i < this.length; i++){   //遍历当前要去重的数组
 6         if(!obj[this[i]]){         //判断obj对象中是否存有当前项,没有则执行
 7             arr.push(this[i]);    //将当前项push到临时数组中
 8             obj[this[i]] = 1;     //将当前项存入obj对象
 9         }
10     }
11     console.timeEnd("数组去重法1");   //记录结束执行的时间
12     return arr;
13 }

数组去重法2:

 1 Array.prototype.unique2 = function(){
 2     console.time("数组去重法2");    //记录开始执行的时间
 3     var arr = [];       //创建一个临时数组
 4     for(var i = 0; i < this.length; i++){     //遍历当前要去重的数组
 5         if(arr.indexOf(this[i]) == -1){     //判断临时数组中是否存有当前项,没有则执行
 6             arr.push(this[i]);  //将当前项push到临时数组中
 7         }
 8     }
 9     console.timeEnd("数组去重法2");   //记录结束执行的时间
10     return arr;
11 }

数组去重法3:

 1 Array.prototype.unique3 = function(){
 2     console.time("数组去重法3");    //记录开始执行的时间
 3     var arr = [this[0]]; //创建一个临时数组,并将要去重数组的第一项存入临时数组
 4     for(var i = 1; i < this.length; i++) {  //从要去重数组第二项开始遍历
 5         if (this.indexOf(this[i]) == i){    //判断临时数组中是否存有当前项,没有则执行
 6             arr.push(this[i]);  //将当前项push到临时数组中
 7         }
 8     }
 9     console.timeEnd("数组去重法3");   //记录结束执行的时间
10     return arr;
11 }

效率测试方法:

1 var arr1 = [];  //创建一个要去重的数组
2 for(var i = 0; i < 200000; i++){  //遍历200000个数据
3     arr1.push(parseInt(Math.random() * 10) + 1); //将所有数据返回为随机数(1-10之间)的数, 并push到要去重的数组中
4 }
5
6 console.log(arr1.unique1());    //打印数组去重法1的执行时间
7 console.log(arr1.unique2());    //打印数组去重法2的执行时间
8 console.log(arr1.unique3());    //打印数组去重法3的执行时间

效率测试结果:

(完~~)

时间: 2024-10-05 23:47:56

javascript数组去重 - 效率测试的相关文章

JavaScript数组去重方法及测试结果

最近看到一些人的去面试web前端,都说碰到过问JavaScript数组去重的问题,我也学习了一下做下总结. 实际上最有代表性也就三种方法:数组双重循环,对象哈希,排序后去重. 这三种方法我都做了性能测试,有兴趣的朋友可以去试试,这是测试地址 双重循环最慢(不是一般的慢),对象哈希是最快的,排序后去重根据浏览器不同比对象哈希慢2-3倍

JavaScript数组去重的7种方式

1.利用额外数组 function unique(array) {    if (!Array.isArray(array)) return;     let newArray = [];    for(let i=0, len=array.length; i<len; i++) {        let itemAtIndex = array[i];        if (!newArray.includes(itemAtIndex)) { // newArray.indexOf(itemAt

JavaScript 数组去重

JavaScript 数组去重 Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对话,你会学到很多.为什么是 underscore?最主要的原因是 underscore 简短精悍(约 1.5k 行),封装了 100 多个有用的方法,耦合度低,非常适合逐个方法阅读,适合楼主这样的 JavaScript

javascript数组去重算法-----4(另一种写法)

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

javascript数组去重算法-----4(另一种写法__2)

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

javascript数组去重算法-----5

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

javascript数组去重算法-----3

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

javascript数组去重算法-----2

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----2</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

javascript数组去重算法-----1

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----1</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5