1.使用reduce实现
function arrUnique(arr,prop){
let obj = {};
return arr.reduce(function(preValue,item){
//判断是否存在这个属性值如果存在赋值为空字符串,不存在赋值为true
//为ture时添加到返回的数组中
obj[item[prop]] ? '' : obj[item[prop]] = true && preValue.push(item);
return preValue
},[]) //[]为初始值数组
}
let arr = [{name:'zhangsan'},{name:'lisi'},{name:'lisi},{name:'wangwu'}]
//其中arr为要去重的对象数组,name:为要去重依据的属性名。
let newArr = arrUnique(arr,'name')
2.使用filter+findIndex实现
function arrUnique(arr,prop){
return arr.filter(function(item,index,self){
return self.findIndex(el=>el[prop]==item[prop])===index
})
}
let arr = [{name:'zhangsan'},{name:'lisi'},{name:'lisi},{name:'wangwu'}]
//其中arr为要去重的对象数组,name:为要去重依据的属性名。
let newArr = arrUnique(arr,'name')
3.使用filter+new Map(has+set)实现
function arrUnique(arr,prop){
const map = new Map()
//has方法:判断map是否有这个属性,set方法:为这个属性设置值
return arr.filter((el)=>{!map.has(prop)&&map.set(prop,1)})
}
let arr = [{name:'zhangsan'},{name:'lisi'},{name:'lisi},{name:'wangwu'}]
//其中arr为要去重的对象数组,name:为要去重依据的属性名。
let newArr = arrUnique(arr,'name')