reduce()方法和reduceRight()方法依次处理数组的每个成员,最终累计为一个值。 它们的差别是,reduce()是从左到右处理,reduceRight()则是从右到左,其他完全一样。

[1, 2, 3, 4, 5].reduce(function (a, b) {

console.log(a, b);

return a + b;

})

// 1 2

// 3 3

// 6 4

// 10 5

//最后结果:15

上面代码中,reduce()方法用来求出数组所有成员的和。reduce()的参数是一个函数,数组每个成员都会依次执行这个函数。如果数组有 n 个成员,这个参数函数就会执行 n - 1 次。

第一次执行:a是数组的第一个成员1,b是数组的第二个成员2。第二次执行:a为上一轮的返回值3,b为第三个成员3。第三次执行:a为上一轮的返回值6,b为第四个成员4。第四次执行:a为上一轮返回值10,b为第五个成员5。至此所有成员遍历完成,整个方法的返回值就是最后一轮的返回值15。

reduce()方法和reduceRight()方法的第一个参数都是一个函数。该函数接受以下四个参数。

累积变量。第一次执行时,默认为数组的第一个成员;以后每次执行时,都是上一轮的返回值。当前变量。第一次执行时,默认为数组的第二个成员;以后每次执行时,都是下一个成员。当前位置。一个整数,表示第二个参数(当前变量)的位置,默认为1。原数组。

这四个参数之中,只有前两个是必须的,后两个则是可选的。

[1, 2, 3, 4, 5].reduce(function (

a, // 累积变量,必须

b, // 当前变量,必须

i, // 当前位置,可选

arr // 原数组,可选

) {

// ... ...

如果要对累积变量指定初值,可以把它放在reduce()方法和reduceRight()方法的第二个参数。

[1, 2, 3, 4, 5].reduce(function (a, b) {

return a + b;

}, 10);

// 25

上面代码指定参数a的初值为10,所以数组从10开始累加,最终结果为25。注意,这时b是从数组的第一个成员开始遍历,参数函数会执行5次。

建议总是加上第二个参数,这样比较符合直觉,每个数组成员都会依次执行reduce()方法的参数函数。

相关阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: