Аккумулятор возвращает NaN в уменьшенной функции в Javascript - PullRequest
0 голосов
/ 12 июня 2018

Я учусь использовать ..., оператор распространения, чтобы написать функцию, которая принимает все параметры, переданные функции, и возвращает сумму четных.Мой вопрос таков: почему мой acc равен NaN, кроме первого обратного вызова метода redu ()?

Код и выполненная распечатка приведены ниже, а console.log(...) - это код отладки, который я вставил.Спасибо за вашу помощь.

 function sumEvenArgs(...args){
  var sum = args.reduce( (acc, next) => {
    console.log("\nnext:", next);
    if (next % 2 === 0) {
      acc += next;
      console.log("in if - acc:", acc);
    } else {
      acc += 0;
      console.log("in else - acc:", acc);
    }
  }, 0);

  return sum;
}
var sum = sumEven(1,2,3,4) // 6
console.log("sum:", sum);

Вывод:

next: 1
in else - acc: 0

next: 2
in if - acc: NaN

next: 3
in else - acc: NaN

next: 4
in if - acc: NaN
sum: undefined

1 Ответ

0 голосов
/ 12 июня 2018

вы должны вернуть acc в конце функции обратного вызова

function sumEvenArgs(...args){
    var sum = args.reduce( (acc, next) => {
        console.log("\nnext:", next);
        if (next % 2 === 0) {
            acc += next;
            console.log("in if - acc:", acc);
        } else {
            acc += 0;
            console.log("in else - acc:", acc);
        }
        return acc ; // you need to add this line 
    }, 0);

    return sum;
}
var sum = sumEvenArgs(1,2,3,4) // 6
console.log("sum:", sum);
...