我正在寻找的解决方案:我的函数需要返回数组中所有偶数的和。答案是30。
我遇到的问题:它返回的答案是25。
let numStr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const sumEvens = (numStr) => {
let sum = 0;
for (let i = 0; i < numStr.length; i++) {
if (i % 2 === 0){
sum = sum + numStr[i];
}
}
return sum;
}
console.log(sumEvens(numStr));
我改变了这个函数,把它推到一个sum数组,并返回sum数组,以找到它返回25的原因,因为它是一个奇数数组,而不是偶数。
let numStr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const sumEvens = (numStr) => {
let sum = [ ];
for (let i = 0; i < numStr.length; i++) {
if (i % 2 === 0){
sum.push(numStr[i]);
}
}
return sum;
}
console.log(sumEvens(numStr));
我能够得到正确输出30的唯一方法是使我的if语句if (i % 2 !== 0)
,但我知道这意味着只有在数组中的数字不是偶数时才能相加。
我觉得我离成功很近,但还差一点。其他的SO帖子和MDN没有帮助我。
7条答案
按热度按时间lvmkulzt1#
与
您正在检查正在迭代的 index 是否为偶数。因此,您最终会将
numStr[0]
、numStr[2]
等加在一起。检查该索引处的值:4xy9mtcn2#
将
filter
与reduce
配合使用:当前代码的问题是检查的是索引,而不是元素。
osh3o9ms3#
使用过滤器并减少。
ddrv8njm4#
你可以使用JavaScript reduce
icomxhvb5#
这里已经列出了许多好的解决方案。然而,我想到了使用
for...of
循环来分享以下内容:还注意到许多涉及filter & reduce的解决方案未能为reduce给予默认值。如果传入一个空数组,这将以错误结束。可以这样更好地处理:
在一个完全不同的情况下,如果你知道你总是需要在一个偶数的范围内执行这个求和。数字。我们也可以这样做:
在这样的场景中,上述将在
Big O notation
方面给予最佳性能。在这里,我们使用一个公式,而不是任何类型的循环。bsxbgnwa6#
cwtwac6a7#