美文网首页
Reduce 理解

Reduce 理解

作者: 不要面包要蛋糕 | 来源:发表于2020-11-10 17:08 被阅读0次

    定义

    reduce() 方法对数组中的每个元素执行一个 reducer 函数(升序执行),并将其结果汇总为单个返回值。

    基础示例

    /**
    求数组中各项的和
    **/
    // 没有初始值
    let arr = [1, 2, 3, 4, 5];
    let reducer = (accumulator, current) => accumulator + current;
    console.log(arr.reduce(reducer)) //1+2+3+4+5 = 15
    //有初始值
    console.log(arr.reduce(reducer, 10)) // 10+1+2+3+4+5 = 25
    

    reducer

    reducer 函数接收四个参数
    Accumulator(acc) - 累加器:累计器累计回调的返回值; 它是上一次调用回调时返回的累积值
    Current Value(cur) - 当前值:数组中正在处理的元素
    Current Index(idx) - 当前索引:数组中正在处理元素的索引
    Source Array(src) - 源数组:正在处理的数组
    reducer 函数的返回值分配给累加器,该返回值在数组的每个迭代中被记住,最后成为最终的单个结果值。

    reduce 语法

    arr.reduce(callback, initialValue)
    

    参数说明:
    callback:即为上面 reducer;
    initialValue:第一次调用 callback 函数的初始值。如果没有提供 initialValue,acc 将使用数组的第一个元素,cur 使用数组的第二个元素;如果有,acc 即使用 initialValue。在空数组上调用 reduce 会报错
    如果数组为空且没有 initialValue,会抛出 Type Error;如果数组为空有 initialValue 或数组有一个元素没有 initialValue,会返回这个唯一值,callback 不会被执行(建议都提供初始值)。

    拓展示例

    /**
    计算数组中各个元素出现的次数
    **/
    let arr = ['a', 'b', 'a', 'c', 'd', 'd'];
    let reducer = (allElements, element) => {
      if(element in allElements){
        allElements[element] ++
      }else{
        allElements[element] = 1
      }
      return allElements;
    }
    console.log(arr.reduce(reducer, {})) // { "a": 2, "b": 1, "c": 1, "d": 2 }
    /*
    将二维数组展开为一维数组
    */
    [[1,2],[3,4],[5,6]].reduce((acc, cur) => {
      return acc.concat(cur);
    }, [])
    

    相关文章

      网友评论

          本文标题:Reduce 理解

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