为了账号安全,请及时绑定邮箱和手机立即绑定

返回数组中偶数之和

返回数组中偶数之和

九州编程 2021-05-24 12:13:21
我正在寻找的解决方案:我的函数需要返回数组中所有偶数之和。预期的答案是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并没有帮助我。
查看完整描述

3 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞


if (i % 2 === 0){ 

您正在检查被迭代的索引是否为偶数。所以,你最终会相加numStr[0],numStr[2]等该指数而不是在检查值:


if (numStr[i] % 2 === 0) {

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 (numStr[i] % 2 === 0) {

    sum = sum + numStr[i];

    }

  }

  return sum;

}

 

console.log(sumEvens(numStr));


查看完整回答
反对 回复 2021-05-27
?
HUX布斯

TA贡献1876条经验 获得超6个赞

使用filter与reduce替代:


let numStr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];


const sumEvens = arr => arr.filter(e => !(e % 2)).reduce((a, b) => a + b);


console.log(sumEvens(numStr));

当前代码的问题是您正在检查索引,而不是元素。


查看完整回答
反对 回复 2021-05-27
?
智慧大石

TA贡献1946条经验 获得超3个赞

使用过滤器并减少。


let numStr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];


let sum = numStr.filter(i => i%2 ===0).reduce((a,v) => a += v);


console.log(sum);


查看完整回答
反对 回复 2021-05-27
  • 3 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信