前一篇中提到了可利用reduce
函数做数组扁平化以及数据统计之类的操作,这篇中将会介绍利用 reduce 实现的更高级操作。
reduce 的用法为 arr.reduce(callback[, initialValue])
,在MDN中对 initialValue
有这么一段解释。
Value to use as the first argument to the first call of the
callback
. If no initial value is supplied, the first element in the array will be used. Callingreduce()
on an empty array without an initial value is an error.
callback
函数接受4个参数:之前值、当前值、索引值以及数组本身。若指定 initialValue
,则当作最初使用的 previous
值;如果不指定 initialValue
,则使用数组的第一个元素作为 previous
初始值,同时 current
往后顺延。因此不指定 initialValue 时会比指定时少一次迭代。
1 | [1, 2, 3].reduce((previous, current) => previous * current) |
用这个简单的例子可以体会出有无 initialValue 的差别了吧。
给力一点
我们再来看一个黑科技,利用 reduce 结合函数 bind 可以实现函数的链式调用
1 | // 给定2个字符串处理函数 |
再给力一点
注:以下代码出自十年踪迹(月影)的函数式编程入门
1 | class Task{ |