我能够使用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
答案 0 :(得分:1)
您可以先slice
个数组,然后reduce
个结果数组。不需要reduceRight
,因为求和运算是可交换的。
x = [1, 2, 3, 4, 5];
n = 4;
y = x.slice(-n).reduce((acc, val) => acc + val);
console.log(y);
答案 1 :(得分:1)
您可以在计数c
上使用闭包,并检查此值并减小并以Microsoft Docs.取值。
此提案根据需要使用logical AND &&
。
var array = [1, 2, 3, 4, 5],
sum = array.reduceRight((c => (s, v) => s + (c && c-- && v))(3), 0)
console.log(sum);
答案 2 :(得分:1)
在reduceRight
(或归约)中,有2个参数
last/first
将是初始值,并且将从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
)
所以sum + ((array.length - idx) <= N && each)
如果条件(array.length - idx) <= N
为false,它将返回false,并且不会传给and运算符,否则将返回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);
答案 3 :(得分:0)
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。
答案 4 :(得分:0)
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))
答案 5 :(得分:0)
board_href_deals items test1
0 test2 [{'x': 'a'}, {'x': 'b'}] ['test1', 'test2']
答案 6 :(得分:0)
非常简单:
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);
答案 7 :(得分:-1)
您可以尝试以下逻辑:
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))
答案 8 :(得分:-1)
类似这样的东西
lastN=(x,n)=>(m=x.length-n,x.reduceRight((a,v,i)=>{return a+=i>=m?v:0;},0))