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