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

JavaScript 数组求和时整型值意外转换为字符串问题求助

问题根因

你代码的核心问题是误用了for...in语法遍历数组:

  • for...in设计用于遍历对象的可枚举属性,当作用于数组时,返回的是字符串格式的数组索引,不是数组元素本身
  • 你累加时直接把字符串类型的索引和total相加,触发了JS的隐式类型转换,数字和字符串相加会自动转成字符串拼接,所以最终得到了拼接后的字符串结果

修复方案

  1. 把遍历数组的for...in替换为for...of,直接获取数组元素
  2. 可根据需求简化sum函数的参数判断逻辑,避免不必要的分支

完整可运行修复代码

// range函数逻辑正常,无需修改
function range(start, end, step = 1) {
    let iterator = start;
    let array = new Array();
    while(iterator <= end) {
        array.push(iterator);
        iterator += step;
    }
    return array;
}

// 修复后的sum函数,同时支持直接传入多个数字、一维数组、多维数组参数
function sum(...inputs) {
    let total = 0;
    // 自动扁平化所有层级的数组
    const numList = inputs.flat(Infinity);
    for(const num of numList) {
        total += num;
    }
    return total;
}

console.log(sum(range(1,10))); // 正确输出55

如果你希望保留原有逻辑框架,仅做最小改动,可参考如下修改:

function sum(...inputs) {
    let total = 0;
    if(inputs[0] instanceof Array) {
        // 仅把for...in替换为for...of即可
        for(const input of inputs[0]) {
            total += input;
        }
    }
    else {
        for(const input of inputs) {
            total += input;
        }
    }
    return total;
}

内容的提问来源于stack exchange,提问作者Israel Hoffman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 05:24:11