日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数组去重的各种方法速度对比

發布時間:2025/3/20 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数组去重的各种方法速度对比 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先需要一個自動生成數組的函數

// 自動生成數組的函數function randomArr (n) {let arr = [];for (let i = 1; i <= n; i++) {arr.push(Math.floor(Math.random() * (i + 1)));}return arr;}
  • 執行上面函數,的到的arr1數組長度為50000,因為js執行速度很快,只有長度很大時,才能看到各個方法的執行速度的差別
  • 注意 arr2到arr7不能簡單的用賦值,否則arr1改變后,arr2到arr7也相應改變了
  • // 七個相同的數組 并且數組長度要足夠大才能對比出來var n = 50000;var arr1 = randomArray(n);var arr2 = [...arr1];var arr3 = [...arr1];var arr4 = [...arr1];var arr5 = [...arr1];var arr6 = [...arr1];var arr7 = [...arr1];

    接下來是數組去重的各種方式

    /*** 數組去重方法1: 有相同就跳過*/function unique (arr) {var len = arr.length;var newArr = [];for (var i = 0; i < len; i++) {for (var j = i + 1; j < len; j++) {if (arr[i] === arr[j]) {j = ++i;}}newArr.push(arr[i]);}return newArr;}/*** 數組去重方法2:有相同就刪除后面的*/function unique2 (arr) {var len = arr.length;for (var i = 0; i < len; i++) {for (var j = i + 1; j < len; j++) {if (arr[i] === arr[j]) {arr.splice(j, 1);j--;len--;}}}return arr;}/*** 數組去重方法3:利用對象屬性不能相同去重*/function unique3 (arr) {var obj = {}, newArr = [];for (var i = 0; i < arr.length; i++) {if (!obj[arr[i]]) {obj[arr[i]] = 1;newArr.push(arr[i]);}}return newArr;}/*** 數組去重方法4:數組遞歸去重*/function unique4 (arr) {arr.sort();var len = arr.length;for (var i = 0; i < len - 1; i++) {if (arr[i] === arr[i + 1]) {arr.splice(i + 1, 1);i--;len--;}}return arr;}/*** 數組去重方法5:indexOf/forEach/map/filter*/function unique5 (arr) {var newArr = [];arr.forEach(function(item, index, arr){// if(newArr.indexOf(item)===-1){// newArr.push(item);// }if (arr.indexOf(item, index + 1) === -1) {newArr.push(item);}});return newArr;}/*** 數組去重方法6:es6 new Set()*/function unique6 (arr) {// return [...new Set(arr)];return Array.from(new Set(arr));}/*** 數組去重方法7:es6 [...]*/function unique7 (arr) {return [...new Set(arr)];}

    計算各個方法所花費的時間

  • 最后,需要一個函數調用以上數組去重的方法,并進行時間計算
  • // 計算時間function calcRunTime (func, arr) {console.time('testForEach');var array = func(arr);console.timeEnd('testForEach');console.log(array);}// 開始計算calcRunTime(unique,arr1);calcRunTime(unique2,arr2);calcRunTime(unique3,arr3);calcRunTime(unique4,arr4);calcRunTime(unique5,arr5);calcRunTime(unique6,arr6);calcRunTime(unique7,arr7);

    計算結果來了

    unique: 2921.845947265625ms
    unique2: 3580.632080078125ms
    unique3: 12.416259765625ms
    unique4: 617.23779296875ms
    unique5: 2497.0478515625ms
    unique6: 20.821044921875ms
    unique7: 12.881103515625ms

    小結

    可以看出:

  • 第6種和第7種方法利用es6語法去重,不僅代碼簡單,執行速度也快
  • 利用對象key值的唯一性去重,執行速度也是很快的,其它方法就比較劣勢了
  • 總結

    以上是生活随笔為你收集整理的数组去重的各种方法速度对比的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。