// 自動生成數組的函數 function randomArr (n) { let arr = []; for (let i = 1; i <= n; i++) { arr.push(Math.floor(Math.random() * (i + 1))); } return arr; }
// 七個相同的數組 而且數組長度要足夠大才能對比出來 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.881103515625mses6
能夠看出:數組