如何在average函数中忽略字符串类型以正确计算平均值?
解决average函数忽略字符串参数计算平均值的问题
你的代码目前存在两个核心问题:
- 直接累加所有参数时,遇到字符串会触发字符串拼接,导致
total变成字符串类型,后续除法计算完全错误; - 计算平均值时用了所有参数的总长度,但实际应该只统计有效数值参数的数量。
结合你“忽略所有字符串类型参数”的需求,修正后的代码如下:
function average() { let total = 0; let validCount = 0; for (let i = 0; i < arguments.length; i++) { const arg = arguments[i]; // 仅处理类型为number的参数,直接跳过所有字符串类型 if (typeof arg === 'number') { total += arg; validCount++; } } // 避免无有效参数时除以0的报错,返回0或根据需求调整 return validCount > 0 ? total / validCount : 0; }
关键说明:
- 用
typeof arg === 'number'精准判断参数类型,确保只处理真正的数值,完全忽略所有字符串(哪怕是像"20"这种可转换为数字的字符串); - 新增
validCount计数器,只统计有效数值的数量,而不是用arguments.length; - 初始
total直接设为0,比Number('')更直观。
测试调用average(10, "20", 30, "40", 50, "60", 70, "80", 90, "100"),会计算10+30+50+70+90的总和250,除以有效参数数量5,得到期望结果50。
你之前尝试parseInt、isNaN未成功的原因:
- 如果用
parseInt直接转换字符串参数,会把"20"这类字符串转成数字累加,不符合你“忽略所有字符串”的需求; isNaN会自动将字符串转换为数字后判断,比如isNaN("20")返回false,无法区分字符串类型的数字和真正的数值类型参数,导致判断逻辑失效。
内容的提问来源于stack exchange,提问作者Asmir
相关产品推荐
相关产品推荐

