如何实现支持任意参数、自动校验可转数值类型的JS sum求和函数
问题分析
你的现有代码存在两处核心逻辑错误:
- 当判断
isNaN(i)为真时直接返回Number(i),会直接覆盖累加值,若转换结果为NaN会导致后续所有累加结果异常 - 没有对转换后的数值做有效性校验,无法过滤不可转为有效数值的参数
正确实现
const sum = (...arr) => { return arr.reduce((acc, cur) => { const num = Number(cur) return isNaN(num) ? acc : acc + num }, 0) }
逻辑说明
- 累加初始值设为0,无参数调用时直接返回0,匹配要求
- 遍历每个参数时先统一转为数值类型
- 转换后的值若为
NaN,代表该参数无法转为有效数值,直接返回当前累加值忽略该参数;否则累加后返回新的累加值
测试验证
使用你给出的测试用例运行结果如下,完全符合预期:
console.log(sum(1, 2, 3, 4, 5, 6)) // 输出 21 console.log(sum(-10, 15, 100)) // 输出 105 console.log(sum()) // 输出 0 console.log(sum(1, 'fqwfqwf', {}, [], 3, 4, 2, true, false)) // 输出 11
内容的提问来源于stack exchange,提问作者Art
相关产品推荐
相关产品推荐

