为什么 NaN 会减少回报?

问题描述

我有意将 return sum 注释掉了,因为它没有按预期工作。 如果我删除返回总和,它会返回正确的平均值。但这是我不明白的:当它在最后一个索引位置进入 if 时,此返回显示 NaN。 但是为什么它返回 NaN?

const mediaNumeros = numeros.reduce((sum,element,index,array) => {
    sum = sum + element;
    if (index == array.length - 1) {
        return Number((sum / array.length).toFixed(2));
    }
    // return sum;
},0)

解决方法

假设 numeros 的值为 [8,90,7]

让我们看看每次迭代发生了什么:-

第一次迭代: 在计算 sum

之前
  • 数组:[8,7]
  • 元素:8
  • 索引:0
  • 总和:0

计算sum

  • 数组:[8,7]
  • 元素:8
  • 索引:0
  • 总和:8

如果我们在第一次迭代后不返回 sum

在第二次迭代中: 在计算 sum

之前
  • 总和:undefined
  • 数组:[8,7]
  • 元素:90
  • 索引:1

注意:Array.prototype.reduce() 接受一个函数(即高阶函数)而不是循环

sum 变得未定义,因为我们没有返回前一个函数调用的值。 js 引擎不知道 sum 的值是多少,因为前面的函数已经完成并且它的执行上下文被删除了。

计算后sum

  • 总和:undefined + 90 = NaN
  • 数组:[8,7]
  • 元素:90
  • 索引:1

所以 sum 的值变成 NaN

因此它继续将 sum 的值计算为 NaN。