方法1、创建一个新的临时数组来保存数组中已有的元素

方法2、使用哈希表存储已有元素

方法3、使用indexof判断数组元素第一次出现的位置是否为当前位置

方法4、先排序再去重

第一种方法和第三种方法都使用了indexof(),这个函数的执行机制也会遍历数组
第二种使用了哈希表,是最快的
第三种也有一个排序的复杂度的计算
详细代码如下:
1 <!-- js实现数组去重
2 方法1、创建一个新的临时数组来保存数组中已有的元素
3 -->
4 <!-- js实现数组去重
5 方法2、使用哈希表存储已有元素
6 -->
7 <!-- js实现数组去重
8 方法3、使用indexof判断数组元素第一次出现的位置是否为当前位置
9 -->
10 <!-- js实现数组去重
11 方法4、先排序再去重
12 -->
13 <!-- 随机生成100万个0-1000的数组结果
14 方法一执行时间:240
15 方法二执行时间:5
16 方法三执行时间:477
17 方法四执行时间:246
18 第三种方法总是第二种方法的将近两倍,而第四种方法与数组的范围有关
19
20 如果是-100的数组
21 方法一执行时间:40
22 方法二执行时间:4
23 方法三执行时间:64
24 方法四执行时间:176
25
26 而如果是0-10000
27 方法一执行时间:2199
28 方法二执行时间:6
29 方法三执行时间:4876
30 方法四执行时间:298
31 第二种方法是最好的,,,但是是以空间换时间
32 -->
33
34 <script>
35 var a = [];
36 for (var i = 0; i < 1000000; i++) {
37 a.push(Math.ceil(Math.random() * 10000));
38 }
39 Array.prototype.unique1 = function() {
40 var n = []; //临时数组
41 for (var i = 0; i < this.length; i++) {
42 //如果当前数组的第i已经保存进了临时数组,那么跳过
43 if (n.indexOf(this[i]) == -1) {
44 n.push(this[i]);
45 }
46 }
47 return n;
48 }
49 Array.prototype.unique2 = function() {
50 var hash = [],
51 n = []; //hash哈希表,n临时数组
52 for (var i = 0; i < this.length; i++) {
53
54 if (!hash[this[i]]) { //如果hash表中没有当前项
55 hash[this[i]] = true; //存入哈希表
56 n.push(this[i]); //当前元素push到临时数组
57 }
58 }
59 return n;
60 }
61 Array.prototype.unique3 = function() {
62 var n = [this[0]];
63 for (var i = 1; i < this.length; i++) {
64 //如果当前数组元素在数组中出现的第一次的位置不是i
65 //说明是重复元素
66 if (this.indexOf(this[i]) == i) {
67 n.push(this[i]);
68 }
69 }
70 return n;
71 }
72 Array.prototype.unique4 = function() {
73 this.sort(function(a, b) {
74 return a - b;
75 });
76 var n = [this[0]];
77 for (var i = 1; i < this.length; i++) {
78 if (this[i] != this[i - 1]) {
79 n.push(this[i]);
80 }
81 }
82 return n;
83 }
84 var begin1 = new Date();
85 a.unique1();
86 var end1 = new Date();
87 console.log('方法1的执行时间:' + (end1 - begin1));
88 var begin2 = new Date();
89 a.unique2();
90 var end2 = new Date();
91 console.log('方法2的执行时间:' + (end2 - begin2));
92 var begin3 = new Date();
93 a.unique3();
94 var end3 = new Date();
95 console.log('方法3的执行时间:' + (end3 - begin3));
96 var begin4 = new Date();
97 a.unique4();
98 var end4 = new Date();
99 console.log('方法4的执行时间:' + (end4 - begin4));
100 </script>
四种方法执行时间如下:
就分享到这些,下次继续···
分享一下我的微信公众号,分享摄影与编程,谢谢大家的关注