// 数组去重分简单数组去重和数组对象去重 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)