方法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>
四种方法执行时间如下:
就分享到这些,下次继续···