国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript數組去重方法匯總

2024-05-06 16:18:39
字體:
來源:轉載
供稿:網友

數組去重復是一個常見的需求,我們暫時考慮同類型的數組去重復。主要是理清思路和考慮下性能。以下方法,網上基本都有,這里只是簡單地總結一下。

javascript數組去重方法匯總

 

 
  1. Array.prototype.unique1 = function () { 
  2. var n = []; //一個新的臨時數組 
  3. for (var i = 0; i < this.length; i++) //遍歷當前數組 
  4. //如果當前數組的第i已經保存進了臨時數組,那么跳過, 
  5. //否則把當前項push到臨時數組里面 
  6. if (n.indexOf(this[i]) == -1) n.push(this[i]); 
  7. return n; 
  8. }; 
  9. Array.prototype.unique2 = function() 
  10. var n = {},r=[]; //n為hash表,r為臨時數組 
  11. for(var i = 0; i < this.length; i++) //遍歷當前數組 
  12. if (!n[this[i]]) //如果hash表中沒有當前項 
  13. n[this[i]] = true//存入hash表 
  14. r.push(this[i]); //把當前數組的當前項push到臨時數組里面 
  15. return r; 
  16. }; 
  17. Array.prototype.unique3 = function() 
  18. var n = [this[0]]; //結果數組 
  19. for(var i = 1; i < this.length; i++) //從第二項開始遍歷 
  20. //如果當前數組的第i項在當前數組中第一次出現的位置不是i, 
  21. //那么表示第i項是重復的,忽略掉。否則存入結果數組 
  22. if (this.indexOf(this[i]) == i) n.push(this[i]); 
  23. return n; 
  24. }; 
  25. Array.prototype.unique4 = function() 
  26. this.sort(); 
  27. var re=[this[0]]; 
  28. for(var i = 1; i < this.length; i++) 
  29. ifthis[i] !== re[re.length-1]) 
  30. re.push(this[i]); 
  31. return re; 
  32. }; 
  33. var arr = [1,2,2,2,3,3,4,5]; 
  34. console.log(arr.unique1()); // [1, 2, 3, 4, 5] 
  35. console.log(arr.unique2()); // [1, 2, 3, 4, 5] 
  36. console.log(arr.unique3()); // [1, 2, 3, 4, 5] 
  37. console.log(arr.unique4()); // [1, 2, 3, 4, 5] 

其中第1種和第3種方法都用到了數組的indexOf方法。此方法的目的是尋找存入參數在數組中第一次出現的位置。很顯然,js引擎在實現這個方法的時候會遍歷數組直到找到目標為止。所以此函數會浪費掉很多時間。 而第2中方法用的是hash表。把已經出現過的通過下標的形式存入一個object內。下標的引用要比用indexOf搜索數組快的多。

第四種方法的思路是先把數組排序,然后比較相鄰的兩個值。 排序的時候用的JS原生的sort方法,JS引擎內部應該是用的快速排序吧。 最終測試的結果是此方法運行時間平均是第二種方法的三倍左右,不過比第一種和第三種方法快了不少。

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 齐齐哈尔市| 元氏县| 清远市| 年辖:市辖区| 黄石市| 松桃| 丹江口市| 北流市| 沧州市| 广宁县| 六枝特区| 阳信县| 临桂县| 剑川县| 行唐县| 通道| 云阳县| 胶南市| 通城县| 常山县| 轮台县| 蒙山县| 黄大仙区| 宁陕县| 辽宁省| 邵东县| 元氏县| 偏关县| 宜城市| 化德县| 菏泽市| 长乐市| 开远市| 民勤县| 巩留县| 凯里市| 平阳县| 武隆县| 沧州市| 平乡县| 长丰县|