我可以使用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个参数,
  • 累加器(我们上次返回的值(每个),首次返回的init或last / first值)
  • 每个条目(从倒数第二秒到第二秒,取决于是否传递初始化值)
  • 当前索引
  • 整个集合(当您处于连续链中时,这最有用)

    您所要做的就是,(假设您必须添加最后一个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)或eachfalse
    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/

  • 10-09 02:51