美文网首页
JS 使用reduce进行数组去重

JS 使用reduce进行数组去重

作者: 一名有马甲线的程序媛 | 来源:发表于2021-09-19 10:14 被阅读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;
      }
    

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

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

    相关文章

      网友评论

          本文标题:JS 使用reduce进行数组去重

          本文链接:https://www.haomeiwen.com/subject/iypugltx.html