数组对象[object],五种如何去重方法 js
前言
数组有很多方法都可以实现去重。本章分享比较常用的。
准备工作
准备一组数组对象
let arr = [
{ id: "1", name: "张晓", age: 14 },
{ id: "2", name: "张晓", age: 14 },
{ id: "3", name: "张晓", age: 14 },
{ id: "1", name: "张晓", age: 14 },//重复数据
{ id: "3", name: "张晓", age: 14 },//重复数据
]
使用reduce去重
方法1:
let obj = {}
let arr1 = arr.reduce((pre, cur) => {
if (obj[cur.id]) {
return pre
} else {
obj[cur.id] = true
pre.push(cur)
return pre
}
}, [])
方法2:
let arr2 = arr.reduce((pre, cur) => {
if(!pre.some((item)=>item.id===cur.id)){
pre.push(cur)
}
return pre
}, [])
提示:arry.some方法是指只有一条数据满足判断条件,则返回true
方法3:
let arr3 = arr.reduce((pre, cur) => {
if(pre.every((item)=>item.id!==cur.id)){
pre.push(cur)
}
return pre
}, [])
提示:arry.every方法是指全部条数据满足判断条件,则返回true
使用filter去重
let arr4 = arr.filter((item, index, self) => {
const slicelist = self.slice(index+1, self.length)
const find = slicelist.find((itm) => itm.id === item.id)
if (!find) {
return item
}
})
提示:self是指本身的数组,self.slice方法是裁剪数据
使用set去重
const uniqueArry = ()=>{
const stringArry= arr.map((item)=>JSON.stringify(item))
const uniqueList = new Array(...(new Set(stringArry)))
return uniqueList.map((item)=>JSON.parse(item))
}
提示:new Set()是去重的关键,但是只支持去重基本类型(null,undefined,string,boolean,number).所以要使用set去重得先转换类型