js 数组去重

总结一些数组去重,首先定义一个数组 var arry1=[1,5,6,4,8,4,5,5,40,4,50,7,4,55,6,5,444,5,4,4,2,4,5,7,8,8];

1、最常用的,新建数组利用循环进行数组比对,小数组可以,大的性能不佳。

    function removeDuplicatedItem1(ar)
    {
        var rest=[];
        for(var i=0;i<ar.length;i++){
            if (rest.indexOf(ar[i])==-1){
                rest.push(ar[i])
            }else {
                console.log(1)
            }
        }
        return rest;
    }
   console.log(JSON.stringify(removeDuplicatedItem3(arry1)))  //[1,5,6,4,8,40,50,7,55,444,2]

2、推荐使用的,利用对象保存数组for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入对象中。每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。

    function removeDuplicatedItem2(ar)
    {
        var rest=[];
        var object={};
        for(var i=0;i<ar.length;i++){
            if (!object[ar[i]]){
                rest.push(arry1[i])
                object[ar[i]]=1
            }else {
                console.log(1)
            }
        }
        console.log(JSON.stringify(object))
        return rest;
    }
console.log(JSON.stringify(removeDuplicatedItem3(arry1)))  //[1,5,6,4,8,40,50,7,55,444,2]
 

3、利用数组下标和forEach()进行比对,其实主要利用到indexOf(),返回该数在数组中第一次出现的位置这一特性。

    function removeDuplicatedItem3(ar)
    {
        var rest=[];
        ar.forEach(function (p1, p2, p3) {
            if(ar.indexOf(p1)===p2){
                rest.push(p1)
            }
        })
        return rest;
    }
console.log(JSON.stringify(removeDuplicatedItem3(arry1)))  //[1,5,6,4,8,40,50,7,55,444,2]
 

4、先进行排序,这个其实用 的比较少,主要是因为改变了数组的顺序。

 

    function removeDuplicatedItem4(ar)
    {
        ar.sort();
        var rest=[];
       var end=ar[0];
        for(var i=1;i<ar.length;i++){
            if (ar[i]!=end){
                rest.push(ar[i]);
                end=ar[i];
            }else {
                console.log(1)
            }
        }
        return rest;
    }
console.log(JSON.stringify(removeDuplicatedItem3(arry1)))  //[1,5,6,4,8,40,50,7,55,444,2]
 

 

posted @ 2017-10-23 15:19  ABC袁  阅读(208)  评论(0编辑  收藏  举报