-1

我正在尝试对数组的所有奇数求和。以下方法不起作用并返回 NaN。有人可以解释我为什么吗?我找到了一种解决方法,所以我不需要替代代码。如果您能解释一下为什么(假定的数字)%2 是 NaN,那就太好了。非常感谢。(我刚刚开始学习 Javascript。如果是这样的话,很抱歉......)

let arr=[1,2,3,4,5,6,7]

let result = arr.reduce((accumulator, currentValue) => {
  if (currentValue%2 >0){
    return accumulator + currentValue}})
console.log(result)
4

3 回答 3

0

如果它是奇数,则不会返回累加器,因此最后一个结果是undefined + 7which is NaN

始终返回偶数的当前累加器,如果是奇数,则返回累加器 + 数字。

const arr=[1,2,3,4,5,6,7]

const result = arr.reduce((accumulator, currentValue) =>
  currentValue % 2 > 0 ? accumulator + currentValue : accumulator
)

console.log(result)

于 2021-04-07T15:43:07.867 回答
0

您返回undefined所有偶数值(这是所有没有语句的函数的标准)并且不能用于添加数字。returnundefined

为了防止这种情况,您需要返回累加器。

let arr = [1, 2, 3, 4, 5, 6, 7],
    result = arr.reduce((accumulator, currentValue) => {
        if (currentValue % 2 > 0) {
            return accumulator + currentValue;
        } // or use else here
        return accumulator;
    });

console.log(result);

于 2021-04-07T15:43:56.007 回答
0

您只需要else在方法内添加一个子句reduce

因为对于偶数,你不会返回任何东西,这意味着函数会返回undefined,现在当代码遇到奇数时,它undefined + something会返回NaN.

let arr = [1, 2, 3, 4, 5, 6, 7];

let result = arr.reduce((accumulator, currentValue) => {
  if (currentValue % 2 > 0) {
    return accumulator + currentValue;
  }else {
    return accumulator
  }
});
console.log(result);

于 2021-04-07T15:43:24.593 回答