数组reduce()和 reduceRight()方法
很多时候需要累加数组项的得到一个值(比如说求和)。如果你碰到一个类似的问题,你想到的方法是什么呢?会不会和我一样,想到的就是使用for
或while
循环,对数组进行迭代,依次将他们的值加起来 比如
或者
接下来看看双方所使用的时间
while: for:
时间对比
接下来使用更好的方法 ES5提供了 两个数组的方法reduce() 和 reduceRight() 这两个数组会迭代数组的所有数组项。然后返回一个最终值。
reduce() 方法 接收一个函数callback 作为累加器 数组中的每个值开始合并 最终为一个值
array.reduce(callback,[initialValue])
callback函数接收四个参数:
preValue :上一次调用回调返回的值 或者是提供的初始值。
curValue : 数组中当前被处理的数组项
index :当前数组项在数组中的索引值
array 调用reduce() 方法的数组
reduce()
方法为数组中的每一个元素依次执行回调函数callbackfn
,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce()
的数组。
回调函数第一次执行时,preValue
和 curValue
可以是一个值,如果 initialValue
在调用 reduce()
时被提供,那么第一个 preValue
等于 initialValue
,并且curValue
等于数组中的第一个值;如果initialValue
未被提供,那么preValue
等于数组中的第一个值,`curValue等于数组中的第二个值。
回调函数被执行四次,每次参数和返回的值如下:
所以可以直接封装成一个求和的函数
我们再来检测一下需要耗费多少时间
在Chrome浏览器下,每次执行的数据都会略有不同,但可以明显的看出reduce()
对数组项求和所费时间是最短的。
2. reduceRight() 方法
reduceRight()
方法的功能和reduce()
功能是一样的,不同的是reduceRight()
从数组的末尾向前将数组中的数组项做累加