您的位置:首页 > Web前端 > JavaScript

JavaScript数组去重的几种方法效率测试

2016-11-06 16:29 483 查看
javaScript数组去重是前端面试酷爱的问题,问题简单而又能看出程序员对计算机程序执行过程的理解如何。数组去重的方法有很多,到底哪种是最理想的我不清楚。于是我测试了下数组去重的效率。测试二十万个数据,随着数据越多效率很明显的就体验了出来。下面来一起看看吧。

以下是我针对网上三种高效率方法总结与效率测试,如果大家有更好的意见或建议也可以提出,大家共勉学习。

数组去重法1:

?
1

2

3

4

5

6

7

8

9

10

11

12

13
Array.prototype.unique1
=
function
(){


 
console.time(
"数组去重法1"
);
  
//记录开始执行的时间


 
var

arr = [];   
//创建一个临时数组


 
var

obj = {};   
//创建一个空对象


 
for
(
var

i = 0; i <
this
.length;
i++){   
//遍历当前要去重的数组


  
if
(!obj[
this
[i]]){ 
 
//判断obj对象中是否存有当前项,没有则执行


   
arr.push(
this
[i]);
  
//将当前项push到临时数组中


   
obj[
this
[i]]
= 1;   
//将当前项存入obj对象


  
}


 
}


 
console.timeEnd(
"数组去重法1"
);  
//记录结束执行的时间


 
return

arr;


}


数组去重法2:

?
1

2

3

4

5

6

7

8

9

10

11
Array.prototype.unique2
=
function
(){


 
console.time(
"数组去重法2"
);
//记录开始执行的时间


 
var

arr = []; 
//创建一个临时数组


 
for
(
var

i = 0; i <
this
.length;
i++){ 
//遍历当前要去重的数组


  
if
(arr.indexOf(
this
[i])
== -1){ 
//判断临时数组中是否存有当前项,没有则执行


   
arr.push(
this
[i]);
//将当前项push到临时数组中


  
}


 
}


 
console.timeEnd(
"数组去重法2"
);
//记录结束执行的时间


 
return

arr;


}


数组去重法3:

?
1

2

3

4

5

6

7

8

9

10

11
Array.prototype.unique3
=
function
(){


 
console.time(
"数组去重法3"
);
//记录开始执行的时间


 
var

arr = [
this
[0]];
//创建一个临时数组,并将要去重数组的第一项存入临时数组


 
for
(
var

i = 1; i <
this
.length;
i++) {
//从要去重数组第二项开始遍历


  
if

(
this
.indexOf(
this
[i])
== i){
//判断临时数组中是否存有当前项,没有则执行


   
arr.push(
this
[i]);
//将当前项push到临时数组中


  
}


 
}


 
console.timeEnd(
"数组去重法3"
);
//记录结束执行的时间


 
return

arr;


}


效率测试方法:

?
1

2

3

4

5

6

7

8
var

arr1 = [];
//创建一个要去重的数组


for
(
var

i = 0; i <200000; i++){ 
//遍历200000个数据


 
arr1.push(parseInt(Math.random()
* 10) + 1);
//将所有数据返回为随机数(1-10之间)的数,
并push到要去重的数组中


}


 

console.log(arr1.unique1());
//打印数组去重法1的执行时间


console.log(arr1.unique2());
//打印数组去重法2的执行时间


console.log(arr1.unique3());
//打印数组去重法3的执行时间


效率测试结果:


 
以上就是关于JavaScript几种数组去重的方法效率测试,希望测试的结果对大家选择使用数组去重方法能有所帮助。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: