为什么 NaN 会减少 return?
Why NaN's reduce return?
我故意注释掉了 return sum
,因为它没有按预期工作。
如果我删除 return 总和,它 return 就是正确的平均值。但这是我不明白的:当它在最后一个索引位置进入if时,这个return显示NaN。
但为什么它 return 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, 0, 7]
让我们看看每次迭代中发生了什么:-
第一次迭代:
在计算 sum
之前
- 数组:[8, 90, 0, 7]
- 元素:8
- 索引:0
- 总数:0
计算后sum
- 数组:[8, 90, 0, 7]
- 元素:8
- 索引:0
- 总数:8
如果我们在第一次迭代后不return sum
:
第二次迭代:
在计算 sum
之前
- 总和:
undefined
- 数组:[8, 90, 0, 7]
- 元素:90
- 索引:1
注意:Array.prototype.reduce() 接受函数(即它是高阶函数)而不是循环。
sum
变为未定义,因为我们没有 return 上一个函数调用的值。 Js 引擎不知道 sum
的值是什么,因为前面的函数已经完成并且它的执行上下文被删除。
计算后sum
- 总和:
undefined
+ 90 = NaN
- 数组:[8, 90, 0, 7]
- 元素:90
- 索引:1
所以sum
的值变成NaN
所以它继续计算 sum
的值作为 NaN。
我故意注释掉了 return sum
,因为它没有按预期工作。
如果我删除 return 总和,它 return 就是正确的平均值。但这是我不明白的:当它在最后一个索引位置进入if时,这个return显示NaN。
但为什么它 return 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, 0, 7]
让我们看看每次迭代中发生了什么:-
第一次迭代:
在计算 sum
- 数组:[8, 90, 0, 7]
- 元素:8
- 索引:0
- 总数:0
计算后sum
- 数组:[8, 90, 0, 7]
- 元素:8
- 索引:0
- 总数:8
如果我们在第一次迭代后不return sum
:
第二次迭代:
在计算 sum
- 总和:
undefined
- 数组:[8, 90, 0, 7]
- 元素:90
- 索引:1
注意:Array.prototype.reduce() 接受函数(即它是高阶函数)而不是循环。
sum
变为未定义,因为我们没有 return 上一个函数调用的值。 Js 引擎不知道 sum
的值是什么,因为前面的函数已经完成并且它的执行上下文被删除。
计算后sum
- 总和:
undefined
+ 90 =NaN
- 数组:[8, 90, 0, 7]
- 元素:90
- 索引:1
所以sum
的值变成NaN
所以它继续计算 sum
的值作为 NaN。