美文网首页
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