1. 程式人生 > 實用技巧 >js陣列去重3種方法與效能對比

js陣列去重3種方法與效能對比

第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))完勝~