javascript学习笔记数组reduceRight

23 篇文章 0 订阅
11 篇文章 0 订阅

reduceRight方法接受一个回调函数和一个初始值(可选),将数组中的元素(从右向左)汇总为一个返回值。

语法

array.reduceRight(callback(accumnlator, currentValue[, index[, array]]) {…}[, initValue])
array:调用reduceRight方法的数组
callback:用户操作数组中每个元素的回调函数,可以接受四个参数
    accumnlator:累加器,上一次调用回调函数时的返回值。首次调用回调函数时如果提供initValue,则累加器即为initValue。否则为数组中的最后一个元素
    currentValue:当前被处理的元素
    index:(可选)当前处理的元素的索引
    array:(可选)调用reduceRight方法的数组
initValue:(可选)首次调用回调函数时,提供给accumnlator的值。如果没有提供initValue,则将使用数组中的最后一个元素并跳过该元素。如果不提供初始值,则需要保证数组不为空。否则在空数组上调用reduceRight会导致类型错误 TypeError: reduce of empty array with no initial value。
返回值:回调函数处理的结果

描述

reduceRight为数组中的每个元素调用一次回调函数,但是未赋值和已删除的元素索引会被跳过。
首次调用时,accumnlator和currentValue的取值有以下两种情况。

  1. 如果传入了initValue,则accumnlator的取值就位initValue,currentValue取值为数组中的最后一个元素。
  2. 如果没有传入initValue,则accumnlator的取值为数组中的最后一个元素,currentValue取值为数组中倒数第二个元素。

如果数组为空且传入了initValue或者数组中只有一个元素且没有传入initValue。此时会直接返回initValue或者数组中的元素。此时这两种情况下都不会调用callback回调函数。

如果数组为空,且没有传入initValue参数,此时会抛出一个TypeError错误。

此时,首次调用时的情况如下表

数组中的元素个数是否提供initValue结果
01:是
2:否
1:直接返回initValue参数
2:抛出TypeError错误
11:是
2:否
1:accumnlator为initValue参数,currentValue为数组中的元素
2:直接返回数组中的元素
>11:是
2:否
1:accumnlator为initValue参数,currentValue为数组中的最后一个元素
2:accumnlator为数组中最后一个元素,currentValue为数组中倒数第二个元素

改函数的完整执行过程如下

// 未传入initValue
[0, 2, 4, 6, 8].reduceRight(function(accumnlator, currentValue, index, array) {
	return accumnlator + currentValue;
})
callbackaccumnlatorcurrentValueindexarray返回值
第一次调用863[0, 2, 4, 6, 8]14
第二次调用1442[0, 2, 4, 6, 8]18
第三次调用1821[0, 2, 4, 6, 8]20
第四次调用2000[0, 2, 4, 6, 8]20

返回值是最后一次调用reduceRight的值(20)


// 传入initValue
[0, 2, 4, 6, 8].reduceRight(function(accumnlator, currentValue, index, array) {
	return accumnlator + currentValue
}, 10)
callbackaccumnlatorcurrentValueindexarray返回值
第一次调用1084[0, 2, 4, 6, 8]18
第二次调用1863[0, 2, 4, 6, 8]24
第三次调用2442[0, 2, 4, 6, 8]28
第四次调用2821[0, 2, 4, 6, 8]30
第五次调用3000[0, 2, 4, 6, 8]30

返回值是最后一次调用reduceRight的值(30)


示例

1 求一个数组中所有元素的和

const sums = [0, 1, 2, 3, 4].reduceRight((acc, cur) => acc + cur);
// sums  10

2 扁平化一个数组

const flatArr = [[0, 1], [2, 3], [4, 5]].reduceRight(function(acc, cur) {
	return acc.concat(cur)
}, [])
// flatArr  [4, 5, 2, 3, 0, 1]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值