【问题标题】:Why NaN's reduce return?为什么NaN的减少回报?
【发布时间】:2020-12-24 22:44:22
【问题描述】:

我故意注释掉了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)

【问题讨论】:

    标签: javascript reduce


    【解决方案1】:

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

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

    第一次迭代: 在计算之前sum

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

    计算后sum

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

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

    第二次迭代: 在计算之前sum

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

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

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

    计算后sum

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

    所以sum的值变成了NaN

    所以它继续将sum 的值计算为NaN。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      相关资源
      最近更新 更多