我可以使用for循环计算数组的最后n个元素的总和,如下所示。如何使用Arr.reduceRight实现相同目的?
x = [1,2,3,4,5];
y = 0
for(let i=x.length; i>x.length-3; i--) {
console.log(x[i-1]);
y +=x[i-1];
}
console.log(y);
这是codepen链接:https://codepen.io/anon/pen/rrNxZB?editors=0011
最佳答案
在reduceRight
(或reduce)中,有2个参数
last/first
将为init值,并且将从second-last/second
开始,相应地为reduceRight/reduce
)现在,该回调具有4个参数,
您所要做的就是,(假设您必须添加最后一个
N
号)IF (Collection length - Current index) <= N
然后将当前值与和相加并返回ELSE
返回当前总和,忽略当前值所以你可以做
array.reduceRight((sum, each, idx, a) => (a.length - idx) > N ? sum : sum + each , 0)
现在,您可以删除三元并有条件地执行(或
sum +
)。所以
0
如果条件
Each Number
为false,它将返回false,并且不会转到and运算符,否则它将返回sum + ((array.length - idx) <= N && each)
的值,因此它将有条件地添加(array.length - idx) <= N
(0)或each
false
let arr = [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000],
N = 4,
sum = arr.reduceRight((s, e, i, a) => s + ((a.length - i) <= N && e), 0);
console.log(`Sum of last ${N} values: :`, sum);
关于javascript - 如何使用Arr.reduceRight计算数组的最后n个元素的总和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52075074/