js reduce函数求和

map、filter、reduce这三个函数很多时候都是放在一块讲的。

但是相比于map和filter,reduce是比较难以理解的。

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、所以第二次执行回调函数的时候,相加的值就是12,以此类推,最终得到结果6