数组求平均值:空数组时如何返回null而非NaN?
问题分析与解决方案
嘿,我来帮你搞定这个问题~你遇到的核心问题是空数组的判断逻辑失效了,咱们一步步拆解:
为什么arr == []永远不会成立?
在JavaScript里,数组属于引用类型,用==或者===比较引用类型时,比较的是两个变量是否指向同一个内存地址。当你写arr == []时,右边的[]会创建一个全新的空数组对象,哪怕传入的arr也是空数组,它俩也是不同的内存地址,所以这个条件永远是false。
这就导致当你传入空数组[]时,代码不会进入return null的分支,反而走到了else里:
sum初始是0,循环不会执行(因为arr.length是0)- 最后计算
sum / arr.length就是0 / 0,在JS里这个结果是NaN,所以最终返回NaN。
修正方案
1. 正确判断空数组
把空数组判断改成检查数组的length属性,这是最可靠的方式:
if (arr.length === 0) { return null; }
或者更简洁的写法(因为0在布尔语境下是false,取反后为true):
if (!arr.length) { return null; }
2. 修复round函数的调用
另外注意:标准JavaScript里没有全局的round函数,你需要用Math.round()来调用四舍五入方法,不然会抛出ReferenceError(你当前可能没报错是因为环境有自定义函数,但最好用标准写法)。
修正后的完整代码
function mean(arr) { if (arr.length === 0) { return null; } else { var sum = 0; for (var i = 0; i < arr.length; i++) { sum += arr[i]; } return Math.round(sum / arr.length); } }
测试验证
console.log(mean([6,2,3,3,110,6,1,0,5])):计算总和是6+2+3+3+110+6+1+0+5=136,136/9≈15.11,四舍五入后返回15(你之前写返回4应该是笔误,原代码里的round如果是错误调用的话可能导致了异常结果)console.log(mean([])):现在会正确返回null啦
内容的提问来源于stack exchange,提问作者jj008




