JavaScript 对象数组去重

发布时间:9/2/2025
更新时间:9/2/2025
展示:348

核心代码

// 根据唯一ID去重
const {result} = arr.reduce((pre, cur) => {
  if (!pre.hash[cur.id]) {
    pre.hash[cur.id] = true
    pre.result.push(cur)
  }
  return pre
}, {result:[],hash:{}})

遍历数组arr,每次遍历的时候判断hash中是否有唯一ID,有的话就代表是重复的,跳过,没有的话就把ID存起来,并插入到result数组组中,result数组就是最后去重后的数组。

优点

时间复杂度为 O(n),利用空间换取时间,从而提高执行效率。

知识点

上面的例子利用reduce遍历数组,reduce接收两个参数,分别是回调函数 callbackFn 和初始值 initialValue, 利用reduce方法每次遍历数组会调用回调函数 callbackFn。

这里的callbackFn函数接收四个参数,分别是:

  • pre 上一次调用回调函数的返回值
  • cur 当前正在处理的数组元素
  • curIndex 当前正在处理的数组元素的索引
  • arr 调用 reduce() 方法的数组

初始值 initialValue 是可选参数。
如果没有指定初始值,callbackFn函数第一次执行的时候,pre 就是数组的第一个元素,cur就是数组的第二个元素。
如果指定了初始值,callbackFn 函数第一次执行的时候,pre 就是这个这初始值,cur就是数组的第一个元素。