Js面试题(一)--js实现数组去重怎么实现?
生活随笔
收集整理的這篇文章主要介紹了
Js面试题(一)--js实现数组去重怎么实现?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
方法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>四種方法執行時間如下: 就分享到這些,下次繼續···
分享一下我的微信公眾號,分享攝影與編程,謝謝大家的關注
轉載于:https://www.cnblogs.com/huihappy/p/10800727.html
總結
以上是生活随笔為你收集整理的Js面试题(一)--js实现数组去重怎么实现?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图是什么电影,有两个?
- 下一篇: Echo团队Alpha冲刺随笔 - 第九