javascript 返回数组中偶数的和

klh5stk1  于 2023-06-04  发布在  Java
关注(0)|答案(7)|浏览(159)

我正在寻找的解决方案:我的函数需要返回数组中所有偶数的和。答案是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没有帮助我。

lvmkulzt

lvmkulzt1#

if (i % 2 === 0){

您正在检查正在迭代的 index 是否为偶数。因此,您最终会将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));
4xy9mtcn

4xy9mtcn2#

filterreduce配合使用:

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));

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

osh3o9ms

osh3o9ms3#

使用过滤器并减少。

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);
ddrv8njm

ddrv8njm4#

你可以使用JavaScript reduce

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

function getSum(total, num) {
  return total + (num%2===0?num:0);
}
var my_sum = numStr.reduce(getSum, 0);

console.log(my_sum)
icomxhvb

icomxhvb5#

这里已经列出了许多好的解决方案。然而,我想到了使用for...of循环来分享以下内容:

const nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

const sumEvens = (nums) => {
  var total = 0;
  for (let i of nums) { 
    if (i%2 ===0) total += i; 
  }
  return total;
}

还注意到许多涉及filter & reduce的解决方案未能为reduce给予默认值。如果传入一个空数组,这将以错误结束。可以这样更好地处理:

const sum = nums.filter(a => a%2 === 0).reduce((a, b) => a+b, 0);

在一个完全不同的情况下,如果你知道你总是需要在一个偶数的范围内执行这个求和。数字。我们也可以这样做:

const sumEvensInRange = (from , to) => {
  if (from % 2 !== 0 || to % 2 !== 0) {
    console.log(`even numbers expected: [${from}, ${to}]`);
    return -1;
  }
  if (from > to || from === to) {
    console.log(`invalid input: {to} should be greater than ${from}`);
    return -1;
  }
  return (from + to) * (1 + (to - from)/2) / 2;
}

console.log(sumEvensInRange(10, 20)); // 90

在这样的场景中,上述将在Big O notation方面给予最佳性能。在这里,我们使用一个公式,而不是任何类型的循环。

bsxbgnwa

bsxbgnwa6#

let evenNumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
let sum = 0;
for (i = 1; i <= 12; i++)
{
  if (i % 2 === 0)
  {
    sum = sum + i;
  }
}

console.log(sum);
cwtwac6a

cwtwac6a7#

var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

const sumOfEven = (a) => {

  let sum = 0;
  for (let i = 0; i < a.length; i++) {
    if (a[i] % 2 === 0) {
      sum = sum + a[i];
    }
  }
  return sum;

}
console.log(sumOfEven(a));

相关问题