如何让使用剩余参数的平均值函数无参数时返回0而非NaN?
解决平均值函数无参数返回NaN的问题
嗨,我来帮你搞定这个问题~咱们先揪出问题根源:当你调用average()不传任何参数时,剩余参数numbers会变成一个空数组,这时候numbers.length是0,执行avg / 0就会得到NaN(毕竟0不能当除数嘛)。要解决这个问题,只需要在函数里加个判断,处理空数组的情况就行啦。
修改方案一:提前判断空数组
这是最直观的方式,先检查有没有传入参数,要是没有直接返回0:
function average(...numbers) { // 空数组直接返回0 if (numbers.length === 0) { return 0; } let sum = 0; for(let num of numbers) { sum += num; } return sum / numbers.length; }
修改方案二:简化的三元表达式
如果想让代码更紧凑,可以用三元表达式在返回时处理:
function average(...numbers) { let sum = 0; for(let num of numbers) { sum += num; } // 数组有长度就计算平均值,否则返回0 return numbers.length ? sum / numbers.length : 0; }
进阶方案:用reduce简化求和
要是想让代码更简洁,还可以用数组的reduce方法来求和:
function average(...numbers) { if (numbers.length === 0) return 0; const sum = numbers.reduce((total, current) => total + current, 0); return sum / numbers.length; }
现在你再调用average()就会返回0啦,其他有参数的调用也完全不受影响,输出结果和之前一样符合预期。
内容的提问来源于stack exchange,提问作者7vnKge
相关产品推荐
相关产品推荐

