摘要:首先需要一個自動生成數組的函數自動生成數組的函數執行上面函數,的到的數組長度為,因為執行速度很快,只有長度很大時,才能看到各個方法的執行速度的差別注意到不能簡單的用賦值,否則改變后,到也相應改變了七個相同的數組并且數組長度要足夠大才能對比出
首先需要一個自動生成數組的函數
// 自動生成數組的函數 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值的唯一性去重,執行速度也是很快的,其它方法就比較劣勢了
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/97823.html
摘要:基本操作數組去重寫在前面數組去重經常出現在前端招聘的筆試題里,比如有數組,請用實現去重函數,使得返回作為筆試題,考點有二正確?;窘榻B文章主要是對數組去重的常用方法進行介紹。 js基本操作-數組去重 寫在前面 JavaScript 數組去重經常出現在前端招聘的筆試題里,比如: 有數組 var arr = [a, b, c, 1, 0, c, 1, , 1, 0],請用 JavaScr...
1、利用 indexOf() 方法之一 Array.prototype.unique = function(){ var temp = []; for (var i = 0;i < this.length;i++){ // 如果當前數組的第 i 項已經保存到了臨時數組,那么跳過 if(temp.indexOf( this[i] ) == -1){ ...
摘要:主要用到數組的方法。第一種方式是判斷數組中的第一索引號等于參數索引號,一般來說,如果數組元素重復,除第一個元素外,所有重復元素的索引和該元素對應的第一索引是不同的。 1.最簡方法 創建一個空的新數組,依次檢查舊數組的值是否存在于新數組中,如果不存在就push進去。主要用到數組的indexOf方法。 function arrUnique(arr){ ...
摘要:專題系列第三篇,講解各種數組去重方法,并且跟著寫一個前言數組去重方法老生常談,既然是常談,我也來談談。它類似于數組,但是成員的值都是唯一的,沒有重復的值。 JavaScript 專題系列第三篇,講解各種數組去重方法,并且跟著 underscore 寫一個 unique API 前言 數組去重方法老生常談,既然是常談,我也來談談。 雙層循環 也許我們首先想到的是使用 indexOf 來循...
摘要:數組去重雙層循環使用雙層嵌套循環是最原始的方法用來存儲結果如果是唯一的,那么執行完循環,等于外層循環內層循環當和相等時,跳出循環。否則說明元素唯一,這時成立,將此元素添加到中。它類似于數組,但是成員的值都是唯一的,沒有重復的值。 JavaScript數組去重 雙層循環 使用雙層嵌套循環是最原始的方法: var array = [a,b,a]; function unique(arra...
閱讀 3669·2021-11-24 09:39
閱讀 1276·2021-09-30 09:48
閱讀 3258·2021-09-09 11:51
閱讀 2883·2021-09-08 10:41
閱讀 1329·2019-08-30 14:06
閱讀 2798·2019-08-30 14:01
閱讀 874·2019-08-29 17:11
閱讀 3169·2019-08-29 15:37