JS 使用reduce进行数组去重

2021-09-19  本文已影响0人  一名有马甲线的程序媛

前言

之前在撸 JavaScript 书的时候对 reduce 方法有过一面之缘,不过由于 for、forEach、filter、find 都过于强大,在实际开发中一直也没使用过 reduce。偶然发现 reduce 数组去重的方法,看起来很神奇,就探究一下吧~

一 关于reduce

array.reduce(function(accumulator, currentValue, currentIndex, array), initialValue)

它由一个回调函数与一个初始值组成,其中回调函数接受四个参数。

  1. initialValue 第一次执行时的初始值,是一个可选值

  2. accumulator 是 reduce 方法多次执行的累积结果,accumulator 的初始值分两种情况:
    若有提供 initialValue 初始值,第一次循环时 accumulator 的值便为 initialValue,后续循环时 accumulator 为上次循环的返回值;
    若未提供initialValue,第一次循环时 accumulator 的值为数组第一项arr[0],后续循环时为上次循环的返回值。

  3. currentValue 数组循环处理的当前值。
    currentValue 的初始值也受到initialValue的影响:
    若有提供 initialValue 初始值,第一次循环currentValue 的值为数组第一项arr[0],后续变化随索引递增变化;
    若未提供initialValue,第一次循环由于arr[0]成了accumulator 的值,所以currentValue 只能从arr[1]开始,后续变化随索引递增。

4.currentIndex 数组循环当前处理值的索引,currentValue 与 currentIndex是同步变化的。

5.array 当前正在被循环的数组。

小结
如果 reduce 有提供初始值,则循环从索引 0 开始,此时 accumulator 就是 initialValue,currentValue 值就是 arr[0];
如果 reduce 未提供初始值,则 arr[0] 作为初始值赋予给 accumulator,循环从索引1开始,currentValue 值就是 arr[1] 了

二 使用注意

若数组为空且没有初始值,reduce方法报错。

[].reduce(() => console.log(1)); //报错

三 数组去重

  // @arr 要去重的数组
  // @id 根据唯一id去重数组
  function delRepeat ({ arr, id }) {
    let obj = {};
    arr = arr.reduce((a, b) => {
      obj[b[id]] ? '' : obj[b[id]] = true && a.push(b);
      return a;
    }, []);
    return arr;
  }

感谢参考文章
点击查看 >>更多数组去重的方法

如果本文对你有所帮助,感谢点一颗小心心,您的支持是我继续创作的动力!
最后:写作不易,如要转裁,请标明转载出处。

上一篇下一篇

猜你喜欢

热点阅读