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;//返回新數組
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM