js 数组和数组对象去重

数据结构

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

猜你喜欢

转载自blog.csdn.net/weixin_43743175/article/details/129012169