总结 js 对象数组去重的方法

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')

你可能感兴趣的:(js,javascript,前端)