—对象数组去重
const a = [
{id:1, name:'zhangsan'},
{id:2, name:'lisi'},
{id:2, name:'wangwu'}
]
//使用 reduce 去重
const uniqueArr = (arr) => {
let obj = {}
const setArr = arr.reduce((res, cur) => {
obj[cur.id] ? '' : obj[cur.id] = true && res.push(cur)
return res
},[])
return setArr
}
//使用new Set去重
const uniqueArr1 = (arr) => {
let mapArr = new Map()
return arr.filter(item => !mapArr.has(item.flag) && mapArr.set(item.flag, true))
// 多条件去重
/*
return arr.filter(item => {
!mapArr.has(item.id) && mapArr.set(item.id, 0)
&& !mapArr.has(item.name) && mapArr.set(item.name, 0)
})
*/
}
// 双循环去重
const uniqueArr2 = (arr) => {
for(let i = 0, len = arr.length; i < len; i++){
for(let j = i + 1; j < len; j++){
if(arr[i].id === arr[j].id){
arr.splice(j, 1);
}
}
}
return arr
}
–普通数组去重
const arr = ['a','v','c','b','a','f','c']
//使用new Set & 展开运算符
[...new Set(arr)]
Array.from(new Set(arr))
//filter + indexOf [注:需排除数组里有NaN]
const uniqueArr = (arr) => {
return arr.filter((item, index) => arr.indexOf(item) === index)
}
//includes
const uniqueArr = (arr) => {
if(arr.length === 0) return;
let norepeatArr = [];
arr.map(item => !norepeatArr.includes(item) && norepeatArr.push(item))
return norepeatArr
}