javascript數組去重的三種常用方法,及其效能比較

來源:互聯網
上載者:User

在進行數組操作時往往會遇到去掉重複項的問題,下面簡單介紹下數組去重的方法,以及其執行效率

 方法一
        採用兩次迴圈
        原理:拿當前的和他後面的比,如果後面的有重複的就幹掉
        但是我們發現數組最後一項,後面沒有東西,那他就不用和後邊的比較了,所以我們只要迴圈arr.length-1次就可以了

var arr=[1,3,5,3,5,3,4,1,3,5,3,5,3,41,3,5,3,5,3,4,1,3,5,3,5,3,4];
               for(var i=0;i<arr.length-1;i++){
                       var curItem=arr[i];//當前項
                       for(var j=i+1;j<arr.length;j++){
                               if(curItem==arr[j]){
                                      arr.splice(j,1);
                                       j--;
                                   }
                             }
                    }
              console.log(arr);

此方法運用了了兩次迴圈,給瀏覽器帶來很大壓力,次數為數組長度的階乘。

所以考慮用對象替代(對象的屬性名稱字不會重複)方法二

var arr=[1,3,5,3,5,3,4,6,2,2,2,1];
        var len=arr.length;
        var obj={};

        for(var i=0;i<len;i++){
            var cur=arr[i];//當前項
            obj[cur]=cur;
        }
        var list=[];
        for(key in obj){
            list.push(obj[key])
        }
        console.log(list);

此方法執行效率較高,但迴圈使用兩次

採用另一種方法:方法三

原理:  迴圈數組,把數組中的每一項當做obj對象的屬性名稱和屬性值存進來,
        但是我們發現如果obj對象中已經存在了這個屬性名稱的話,那就說明數組重複了,那我們重複資料刪除的項

var arr=[1,3,5,3,5,3,4,1,3,5,3,5,3,41,3,5,3,5,3,4,1,3,5,3,5,3,4];

        var obj={};
        for(var i=0;i<arr.length;i++){
            var cur=arr[i];//當前項
            if(obj[cur]==cur){
                arr.splice(i,1);
                i--
            }else{
                obj[cur]=cur;
            }

        }
        obj=null;
        console.log(arr);

此方法也運用兩次迴圈,仔細想想還有運用一次實現去重的方法。

對方法二封裝成方法

var arr=[1,3,5,3,5,3,4,6,2,2,2,1,7,84,34,634];
Array.prototype.arr_unique=function (){
    var len=this.length;
    var obj={};

    for(var i=0;i<len;i++){
        var cur=this[i];//當前項
        obj[cur]=cur;
    }
    var list=[];
    for(key in obj){
        list.push(obj[key])
    }

    return list;

};

console.log(arr.arr_unique());

對方法三封裝成方法

var arr=[1,3,5,3,5,3,4,6,2,2,2,1,7,84,34,634];
         Array.prototype.arr_unique=function (){
             var obj={};
             for(var i=0;i<this.length;i++){
                 var cur=arr[i];//當前項

                 if(obj[cur]==cur){
                     alert(1111);
                     arr.splice(i,1);
                     i--
                 }else{
                     obj[cur]=cur;
                 }
             }
             obj=null;
             return this;
             };
         console.log(arr.arr_unique());



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.