# arrayReduceRight
# Description
和 reduceRight 类似,从右到左遍历
# Params
(array, iteratee, accumulator, initAccum)
iteratee - 每一次遍历调用的函数
accumulator - 默认值
initAccum - 是否数组最后一项作为默认值
# Return
{*}
- 累计的结果
# Code
function arrayReduceRight(array, iteratee, accumulator, initAccum) {
let length = array == null ? 0 : array.length
if (initAccum && length) {
accumulator = array[--length]
}
while (length--) {
accumulator = iteratee(accumulator, array[length], length, array)
}
return accumulator
}
# Analyze
- 判断
array
是否传入了 ,如果array
不为null
或者 不为undefined
,则取array.length
,否则取0 - 如果
initAccum
为true
,则设置 数组最后一项为 默认值 - 和 arrayReduce 类似,如果
initAccum
为true
,while
遍历时,不会遍历到最后一项 while
循环,结束条件length--
, 调用iteratee
将结果赋值给accumulator
,iteratee
接收四个参数,分别为 当前累计的值,当前元素,当前元素下标,原数组- 最后返回累计的结果
# Remark
- Array.prototype.reduce() MDN (opens new window) 方法对数组中的每个元素执行一个由您提供的 reducer 函数 (升序执行),将其结果汇总为单个返回值。
- Array.prototype.reduceRight() MDN (opens new window) 方法接受一个函数作为累加器(accumulator)和数组的每个值(从右到左)将其减少为单个值。
# Example
const a = [2,3,4,5]
arrayReduceRight(a, (total, val) => total + Math.pow(val, 2), 0) // 54
arrayReduceRight(a, (total, val) => total + Math.pow(val, 2), 0, true) // 34
← arrayReduce asciiSize →