数组去重的方法

// 数组去重分简单数组去重和数组对象去重
        var arr=['aaa','s','d','s','dd','aaa','1','aaa']
        // ------------------------------------------------------------------------------------------
        // 双重循环去重O(n^2)
        function unique(arr){
            var res=[arr[0]]
            for(var i=1;i<arr.length;i++){
                let flag=true
                for(var j=0;j<res.length;j++){
                    if(arr[i]==res[j]){
                        flag=false
                        break
                    }
                }
                if(flag){
                    res.push(arr[i])
                }
            }
            return res
        }
        var res=unique(arr)
        console.log('res',res)
        
        // ------------------------------------------------------------------------------------------

        // 使用indexOf
        function unique1(arr){
            var res=[]
            for(var i=0;i<arr.length;i++){
                if(res.indexOf(arr[i])== -1){
                    res.push(arr[i])
                }
            }
            return res
        }
        var res1=unique1(arr)
        console.log('res1',res1)

        // 利用indexOf检测元素在数组中第一次出现的位置是否和元素现在的位置相等
        function unique11(arr){
            return Array.prototype.filter.call(arr,function(item,index){
                return arr.indexOf(item) === index
            })
        }
        var res11=unique11(arr)
        console.log('res11',res11)
        // ------------------------------------------------------------------------------------------
        //es6的Set数据结构不能重复
        function unique2(arr){
            console.log('111',new Set(arr))
            return [...new Set(arr)]
        }
        var res2=unique2(arr)
        console.log('res2',res2)

        function unique3(arr){
            return Array.from(new Set(arr))
        }
        var res3=unique3(arr)
        console.log('res3',res3)

        // ------------------------------------------------------------------------------------------
        // 再利用一个中间对象,利用对象属性存在的特性,没有的话就存入数组
        function unique4(arr){
           var o={},res=[];
           for(var i=0;i<arr.length;i++){
               if(!o[arr[i]]){
                   o[arr[i]]=1
                   res.push(arr[i])
               }
           }
           console.log(o)
           return res
        }
        var res4=unique4(arr)
        console.log('res4',res4)

        // ------------------------------------------------------------------------------------------
        // 数组对象去重
        // 第一种:根据某一个属性看,有重复的,就去掉
        var points = [{
                lat: 22.687,
                lng: 114.014
            }, {
                lat: 22.687,
                lng: 112.004
            }, {
                lat: 22.837,
                lng: 114.014
            },{
                lat: 26.687,
                lng: 115.014
            },{
                lat: 22.687,
                lng: 115.014
            },{
                lat: 22.687,
                lng: 114.014
            }];
        
            
            function arrUnique(arr){
                var result=[],obj={};
                for(var i=0;i<points.length;i++){
                    if(!obj[points[i].lat]){
                        result.push(points[i])
                        obj[points[i].lat]=1
                    }
                }
                return result
            }
            var result=arrUnique(points)
            console.log('result',result)


            function arrunique2(arr){
                var obj={};
                result = arr.reduce(function(item,next){
                    obj[next.lat]?'':obj[next.lat]=true&&item.push(next)
                    console.log('item',item)
                    console.log('next',next)
                    return item
                },[])
                return result
            }
             var result2 = arrunique2(points)
             console.log(result2)


        // 第二种:所有属性值相同,才认为相同,去掉
        var arrays = [{"id":1,"name":"李四1"},
            {"id":2,"name":"李四1"},
            {"id":2,"name":"李四"},
            {"id":1,"name":"李四1"},
            {"id":5,"name":"李四5"},
        ];

        function arrunique4(arr){
            var obj=[];
            result=arrays.reduce(function(item,next){
                var str=JSON.stringify(next)
                obj.indexOf(str)>-1?'':item.push(next)&&obj.push(str)
                return item
            },[])
            return result
        }
        var arr4 = arrunique4(arrays)
        console.log('4444',arr4)
原文地址:https://www.cnblogs.com/zhuMother/p/12201346.html