JS高阶函数-数组方法-reduce()

734 阅读2分钟

这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战

前面文章学习了 高阶函数, 数组的一些方法(map())也是高阶函数 本篇继续学习 JavaScript 数组的一些相关方法 reduce()

相关更文直达列表 有学习 JavaScript 并不完美但是不影响其运行的一些神奇"small-bug":

JavaScript 高阶函数 reduce()

概念 | MDN - Array.prototype.reduce() : reduce() 方法对数组中的每个元素执行一个由您提供的 reducer 函数(升序执行),将其结果汇总为单个返回值。

reduce()方法的理解

.reduce()map()一样可以理解为高阶函数, 它们都可接收一个函数作为参数, 来对数组遍历的每个元素进行操作. 只不过迭代时进行的操作及参数的不同, 使得 reduce()的功能用法相对高级一些.

个人理解就是各种通过reduce()方法加工之后返回我们需要数据

reduce() 方法的语法、参数

高阶函数-reduce() 函数接收 4个参数:

注意!!: 这里要注意和上一篇学的map()方法的参数的不同

  1. Accumulator (acc) (累计器)
  2. Current Value (cur) (当前值)
  3. Current Index (idx) (当前索引)
  4. Source Array (src) (源数组)
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
 // reduce 方法的返回值分配给累计器,该返回值在数组的每个迭代中被记住,
 // 并最后成为最终的单个结果值。

如上语法: reduce() 把结果继续和序列的下一个元素做累积计算


[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)

reduce() usage

一个简单的用法: reduce 使得数组求和书写更简单

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
arr.reduce(function (x, y) {
  return x + y
})
// 和为 45

这里面就要注意的问题: 给reduce()传递的方法函数的参数具体都代表什么值!

上面的代码还可以使用 箭头函数 代替完整的函数, 使书写更加简洁:

arr.reduce((prev, current) => prev + current)

当然 reduce() 这个方法的功能还是很强大的, 比如扁平化数组, 数组求和,等等就是操作数组的高级功能, 可以在开发中多多使用, 提高代码格调

参考文档