[英]How to calculate sum of last n elements of an array using Arr.reduceRight
您可以先slice
数组,然后reduce
生成的数组。 不需要reduceRight
因为sum操作是可交换的。
x = [1, 2, 3, 4, 5]; n = 4; y = x.slice(-n).reduce((acc, val) => acc + val); console.log(y);
您可以在计数c
使用闭包并检查此值并递减,并使用逻辑AND &&
获取该值。
此提议使用Array#reduceRight
,如所需。
var array = [1, 2, 3, 4, 5], sum = array.reduceRight((c => (s, v) => s + (c && c-- && v))(3), 0) console.log(sum);
在reduceRight
(或reduce)中,有2个参数
last/first
将是init值,它将从second-last/second
开始,相应地为reduceRight/reduce
) 现在回调有4个参数,
你所要做的就是,(假设你必须添加最后N
号码)
IF (Collection length - Current index) <= N
然后 使用sum和return添加当前值
ELSE
返回当前总和忽略当前值
你可以这样做,
array.reduceRight((sum, each, idx, a) => (a.length - idx) > N ? sum : sum + each , 0)
现在,您可以有条件地删除三元组并执行( sum +
0
或Each Number
)
sum + ((array.length - idx) <= N && each)
如果条件(array.length - idx) <= N
为false,它将返回false并且它不会返回到运算符,否则它将返回each
值,因此它将有条件地添加false
(0)或each value
array.reduceRight((sum, each, idx, a) => sum + ((a.length - idx) <= N && each), 0)
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);
x = [1,2,3,4,5]; n = 3; // How many numbers to take console.log(x.slice(-n).reduceRight((prev, curr) => prev + curr, 0))
reduceRight
有两个参数:回调和初始值。 我们正在计算时将它初始化为0。
我的例子中的curr
将是3,然后是4然后5. prev
将是0,然后是3,然后是7。
请参阅: Array.ReduceRight
https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/ReduceRight
几乎就是这样的一个很好的例子。
const elementCountToLeaveOut = 3; console.log([1,2,3,4,5].reduceRight((acc, val, idx) => idx >= elementCountToLeaveOut ? acc + val : acc))
var n = 4; var x = [1, 2, 3, 4, 5]; var y = x.reduceRight(function(accumulator, currentValue) { if (n > 0) { // If n = 0, stop calculating the sum. accumulator += currentValue; } n--; // Reducing n value for every loop. return accumulator; }, 0); console.log(y);
很简单:
var x = [1,2,3,4,5]; var n = 2; var y = x.reduceRight((accumulator, currentValue, index) =>{ if(index < x.length-n) return accumulator; return accumulator + currentValue; }, 0); console.log(y);
你可以试试这个逻辑:
fIndex
),循环应该结束。 reduceRight
循环并检查传递的索引是否小于fIndex
function sumRight(arr, n) { var fIndex = arr.length - n; return arr.reduceRight(function(sum, num, index) { return index < fIndex ? sum : sum + num }, 0) } var x = [1,2,3,4,5] console.log(sumRight(x, 3))
像这样的东西
lastN=(x,n)=>(m=x.length-n,x.reduceRight((a,v,i)=>{return a+=i>=m?v:0;},0))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.