數組去重

今天整理了一下數組去重的幾種方法:

數組去重

方法一:使用雙層for循環

    var arr=[2,2,2,2,3,4,6,12,6,3,12,1,2,3,2,6];
    var newArr=[arr[0]];//存放原數組的第一個元素
    for(var i=1;i<arr.length;i++){//從第二個元素遍歷
            var flag=true;
            for(var j=0;j<newArr.length;j++){//遍歷新數組中的元素
                if(arr[i]==newArr[j]){
                    flag=false;
                    break;
                }
            }
            if(flag){
                newArr.push(arr[i]);
            }
        }
        console.log(newArr);

方法二:先排序後去重

我們可以先對數組進行排序,然後比較相鄰兩個元素,如果兩個元素不相同,就塞到新數組中;

function unique(arr){
            var newArr=[];
            arr.sort(function(a,b){
                return a-b;
            })
            for(var i=0;i<arr.length;i++){
                if(arr[i]!=arr[i+1]){
                    newArr.push(arr[i]);
                }
            }
            return newArr;  
        }

方法三:使用indexof去重

indexof是ES5新增的一種數組方法:用來返回某個元素在數組中位置的索引值,如果沒有該元素,就返回-1;

function unique(arr){
        var newArr=[];
        for(var i=0;i<arr.length;i++){
                if(newArr.indexOf(arr[i])==-1){
                        newArr.push(arr[i]);
                }
        }
        return newArr;
}

方法四:利用對象的屬性去重(推薦)

在創建一個對象時,對象的屬性不能重複,我們可以把每一個數組元素當做對象的屬性,利用對象屬性的無重複性來完成數組去重。

function unique(arr){
        var newArr=[];
        var obj={};
        for(var i=0;i<arr.length;i++){
                if(!obj[arr[i]]){
                        newArr.push(arr[i]);
                        obj[arr[i]]=1;
                }
         }
        return newArr;
}

方法五:使用ES6的set結構去重

    var arr=[2,2,2,2,3,4,6,12,6,3,12,1,2,3,2,6];
    var set=new Set(arr);//輸出一個類數組結構
    arr=[...set];   //將類數組對象轉化成數組
    console.log(arr);

方法六:利用splice直接在原數組上操作

var arr=[2,2,2,2,3,4,6,12,6,3,12,1,2,3,2,6];
var len=arr.length;
for(var i=0;i<len;i++){
        for(var j=i+1;j<len;j++){
                if(arr[j]==arr[i]){
                    arr.splice(j,1);
                    len--;   //截取一個元素,原數組的長度減1
                    j--;//將j的值減1,要不然會出現第一個元素和第三個元素比較的情況,會掠過第二個元素
                }
            }
        }           
        console.log(arr);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章