Возвращаем сумму четных чисел в массиве - PullRequest
1 голос
/ 11 мая 2019

Решение, которое я ищу: моя функция должна возвращать сумму всех четных чисел в моем массиве. Ожидаемый ответ - 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));

Я изменил функцию push на массив 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 if (i % 2 !== 0), но я знаю, что это означает, что добавлять, только если число в массиве НЕ является четным.

Я чувствую себя так близко, но упускаю одну незначительную вещь. Другие SO сообщения и MDN мне не помогли.

Ответы [ 4 ]

4 голосов
/ 11 мая 2019

С

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));
2 голосов
/ 11 мая 2019

Используйте фильтр и уменьшите.

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);
2 голосов
/ 11 мая 2019

Используйте 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));

Проблема с вашим текущим кодом заключается в том, что вы проверяли индекс, а не элемент.

1 голос
/ 11 мая 2019

Вы можете использовать JavaScript уменьшить

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...