1. 程式人生 > 其它 >JS陣列去重的三種方法

JS陣列去重的三種方法

在程式中,通常解決一個問題的方法有很多種。當然這些不同思路的解決方法,在效能和效率上也有很大差異。

以下是數字去重的三種方法,

一、迴圈遍歷法(傳統思路)

最簡單粗暴的演算法,新建一個空陣列,然後遍歷原陣列,將不在新陣列中的項新增到新陣列,最後返回新陣列

function compare(arr){
    var newarr=[];//新建空陣列
    for(var i=0; i<arr.length;i++){//遍歷原陣列
        var isadd=true;//設定標記
        for(var j=0; j<newarr.length;j++){//遍歷新陣列
            if(arr[i]===newarr[j]){isadd=false;break;}//如果當前原陣列中的項,在新陣列中存在,則標記為‘不新增’,並跳出新陣列遍歷
        }
        if(isadd){newarr.push(arr[i]);}//若標記為‘新增’(即遍歷新陣列後,沒有發現相同項),則新增進新陣列
    }
    return newarr;//返回新陣列
}

二、排序比較法(巧妙轉換)

相對第一種方法,需要每次遍歷新舊兩個陣列,效率不高的情況。此方法先對原陣列進行排序,這樣每次只要與新陣列的最後一項比較即可,大大提高效率

function sortarr(arr){
    var arrsort=arr.sort();//對原陣列進行排序
    var newarr=[];//新建空陣列
    newarr.push(arrsort[0]);//將排序後數值的第一項給新增到新陣列
    for(var i=1;i<arrsort.length;i++){//遍歷排序後的陣列
        if(arrsort[i]!==newarr[newarr.length-1]){newarr.push(arrsort[i])}//若當前項與新陣列最後一項不同,這新增到新陣列
    }
    return newarr;//返回新陣列
}

三、物件屬性法(另闢新徑)

相對前兩種方法通過比較的方式,此方法主要利用了物件屬性(key值)不可重複的特性,將陣列中各項賦值給一個新物件,重複將自動覆蓋。最後從物件上遍歷出屬性即可。

function attribute(arr){
    var obj={};//新建空物件
    var newarr=[];//新建空陣列
    for(var i=0; i<arr.length;i++){obj[arr[i]]=null;}//將原陣列項作為物件的key進行賦值
    for( var attr in obj){newarr.push(Math.floor(attr));}//遍歷物件,取出key值新增到新陣列
    return newarr;//返回新陣列
}