数据结构
let arr = [
{ id: 1, name: '张三' },
{ id: 2, name: '李四' },
{ id: 3, name: '王五' },
{ id: 2, name: '张三' }
],
arr2 = [
{ id: 4, name: '赵六' },
{ id: 5, name: '孙七' },
{ id: 3, name: '周八' },
{ id: 2, name: '吴九' },
{ id: 4, name: '郑十' }
],
obj = {}
1.使用reduce(一般推荐)
单个数组对象去重
let newArr = newArr.reduce(function (item, next) {
obj[next.id] ? '' : (obj[next.id] = true && item.push(next))
return item
}, [])
console.log(newArr)
两个数组对象去重
let newArr = arr.concat(arr2)
newArr = newArr.reduce(function (item, next) {
obj[next.id] ? '' : (obj[next.id] = true && item.push(next))
return item
}, [])
console.log(newArr)
2.使用filter和Map(强烈推荐)
单个数组对象去重
const res = new Map()
let newArr = arr.filter(item => !res.has(item.id) && res.set(item.id, 1))
console.log(newArr)
两个数组对象去重
const res = new Map()
let arrs = [...arr, ...arr2],
newArr = arrs.filter(item => !res.has(item.id) && res.set(item.id, 1))
console.log(newArr)
3.使用set()
// 给数组中普通元素去重
let arr = [1, 2, 3, 4, 4]
/* 数组去重:
使用new Set() 去重
使用...扩展运算符,拿出可用的值
加一个数组括号 [ ] 让其转成数组 */
let newArr = [...new Set(arr)]
console.log(newArr)
4.对象数组去重(不保留相同项)
let newArr = arr.filter(function (item1) {
return arr2.every(function (item2) {
return item2.id !== item1.id
})
})
let newArr = [] //保存遍历时要留下的项
for (let i = 0; i < arr.length; i++) {
let item = arr[i],
isExist = false
for (let j = 0; j < arr2.length; j++) {
let id = arr2[j].id
if (item.id == id) {
isExist = true
break
}
}
if (!isExist) {
newArr.push(item)
}
}