zoukankan      html  css  js  c++  java
  • 数组去重的方法

    // 数组去重分简单数组去重和数组对象去重
            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)
  • 相关阅读:
    Spring框架基本应用
    hibernate 多表查询
    myeclipse 中解决Hibernate 和Struts 2的冲突
    新建一个Tomcat服务器
    hibernate连接数据库
    MyEclipse从数据库逆向生成Hibernate实体类
    Struts 2 标签
    struts 2 框架的应用
    AutoIt: WinGetClassList可以把当前窗口所有的handle全部列出来
    自动化测试建议【转载,与我的想法完全雷同】
  • 原文地址:https://www.cnblogs.com/zhuMother/p/12201346.html
Copyright © 2011-2022 走看看