You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在average函数中忽略字符串类型以正确计算平均值?

解决average函数忽略字符串参数计算平均值的问题

你的代码目前存在两个核心问题:

  1. 直接累加所有参数时,遇到字符串会触发字符串拼接,导致total变成字符串类型,后续除法计算完全错误;
  2. 计算平均值时用了所有参数的总长度,但实际应该只统计有效数值参数的数量。

结合你“忽略所有字符串类型参数”的需求,修正后的代码如下:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 16:55:27