数组对象根据对象中指定的属性去重

Frank
  • 开发笔记
  • JS
小于 1 分钟约 200 字...

只有对象重复排重比较符合实际业务,毕竟后端的数据都是数组对象,业务很可能会出现根据 ID 来排重

const obj = [
  {
    name: 'frank',
    age: 123,
  },
  {
    name: 'chang',
    age: 124,
  },
  {
    name: 'chang',
    age: 123,
  },
]
// 使用filter和Map
function uniqueFunc(arr, uniId) {
  const res = new Map()
  return arr.filter((item) => !res.has(item[uniId]) && res.set(item[uniId], 1))
}
// 使用reduce
function uniqueFunc2(arr, uniId) {
  let hash = {}
  return arr.reduce((accum, item) => {
    if (!hash[item[uniId]]) {
      hash[item[uniId]] = true
      accum.push(item)
    }
    return accum
  }, [])
}
// 使用for循环
function uniqueFunc3(arr, uniId) {
  let obj = {}
  let tempArr = []
  for (var i = 0; i < arr.length; i++) {
    if (!obj[arr[i][uniId]]) {
      tempArr.push(arr[i])
      obj[arr[i][uniId]] = true
    }
  }
  return tempArr
}

const arr2 = uniqueFunc2(obj, 'age')
console.log(arr2)

纯数组:数组去重 12 种方案(经典面试必问)open in new window

上次编辑于:
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.14.1