这是我参与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()方法的参数的不同
- Accumulator (
acc) (累计器) - Current Value (
cur) (当前值) - Current Index (
idx) (当前索引) - 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() 这个方法的功能还是很强大的, 比如扁平化数组, 数组求和,等等就是操作数组的高级功能, 可以在开发中多多使用, 提高代码格调
参考文档
- MDN | reduce()