You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

数组求平均值:空数组时如何返回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

火山引擎 最新活动