js陣列去重3種方法與效能對比
阿新 • • 發佈:2020-12-15
第1種:
let arr = [2,3,2,5,3,2,2,1];
for(leti=0;i<arr.length;){
if(arr.indexOf(arr[i])!=arr.lastIndexOf(arr[i])){
arr.splice(i,1);
}else{
i++;
}
}
console.log(arr); // [ 5, 3, 2, 1 ]
第2種:
let arr = [2,3,2,5,3,2,2,1]; for (let i = 0; i < arr.length; i++) { for (let j = i+1; j <arr.length; ) { if (arr[i] == arr[j]) { arr.splice(j, 1); }else { j++; } } } console.log(arr); // [ 2, 3, 5, 1 ]
第3種:
let arr = [2,3,2,5,3,2,2,1];
arr = Array.from(new Set(arr));
console.log(arr); // [ 2, 3, 5, 1 ]
這3種方法都能實現陣列去重,接下來測試下他們的效能
// 測試執行耗時方法 function getRunTime(fun) { const start = new Date().getTime();//起始時間 fun();//執行待測函式 const end = new Date().getTime();//結束時間 return (end - start) + "ms";//返回函式執行需要時間 } letarr=[]; // 給陣列新增20000個不同的值(為了測試效能) for (let i = 0; i < 20000; i++) { arr.push(i); } // 第1種去重方法 function arrRun1(){ for(leti=0;i< arr.length;){ if(arr.indexOf(arr[i])!= arr.lastIndexOf(arr[i])){ arr.splice(i,1); }else{ i++; } } } // 第2種去重方法 function arrRun2(){ for (let i = 0; i < arr.length; i++) { for (let j = i+1; j <arr.length; ) { if (arr[i] == arr[j]) { arr.splice(j, 1); }else { j++; } } } } // 第3種去重方法 function arrRun3(){ arr = Array.from(new Set(arr)); } console.log(getRunTime(arrRun1)); // 多次執行,耗時在500ms - 530ms之間(裝置cpu不同,會有差異) console.log(getRunTime(arrRun2)); // 多次執行,耗時在200ms - 210ms之間(裝置cpu不同,會有差異) console.log(getRunTime(arrRun3)); // 多次執行,耗時穩定在2ms(裝置cpu不同,會有差異)
最終es6的Array.from(new Set(arr))完勝~