map、filter、reduce这三个函数很多时候都是放在一块讲的。
但是相比于map和filter,reduce是比较难以理解的。
reduce可以将数组中的元素通过回调函数最终转换为一个值。
将一个数组里的元素求和,怎么办?通常是这样的思路:
const arr = [1, 2, 3] let total = 0 for(let i = 0; i < arr.length; i++) { total += arr[i] } console.log(total) // 6
如果使用reduce,遍历部分的代码就被优化为只有一行了。
const arr = [1, 2, 3] const sum = arr.reduce((acc, current) => acc + current, 0) console.log(sum) // 6
reduce
函数,接受两个参数,第一个参数是「回调函数」,第二个参数是「初始值」。
下面我们来分解一下上述代码中reduce
的过程。
1、我们可以看下这段代码,reduce的第二个参数是0
,也就是说初始值为0
,该值会在什么时候用呢?该值会在执行第一次回调函数时作为第一个参数传入。
2、回调函数接受四个参数,分别为累计值、当前元素、当前索引、原数组,我们着重分析第一个参数。
3、第一次执行回调函数,当前值和初始值相加得到结果1
,这个结果1
会在第二次执行回调函数时作为第一个参数传入。
4、所以第二次执行回调函数的时候,相加的值就是1
和2
,以此类推,最终得到结果6
。