JavaScript实现getStringSum函数:提取字符串数字求和的问题求助
问题分析与解决方案
原代码存在的核心问题
- 语法错误:
str[]缺少索引标识,应使用str[i]访问当前遍历的字符 - 判断逻辑错误:
typeof Number完全不符合需求——typeof用于检测值的类型,字符串中的数字字符类型是string,而Number是构造函数,typeof Number的结果是function,无法用来判断字符是否为数字 - 数值累加错误:直接执行
sum += str[i]会进行字符串拼接而非数值相加,必须先将字符转为数字类型
修正后的实现方案
方案一:遍历字符+数值有效性判断
function getStringSum(str) { let sum = 0; for (let i = 0; i < str.length; i++) { const char = str[i]; const num = Number(char); // 仅当转换后为有效数字时累加 if (!isNaN(num)) { sum += num; } } return sum; }
- 逻辑说明:用
Number(char)将字符转为数字,非数字字符会转为NaN;通过!isNaN(num)筛选出有效数字,转为数值后累加
方案二:正则匹配+数组求和(更简洁)
function getStringSum(str) { // 匹配所有单个数字字符,无匹配时返回空数组 const numChars = str.match(/\d/g) || []; // 遍历数组将字符转数字后累加,初始值0保证无数字时返回0 return numChars.reduce((total, char) => total + Number(char), 0); }
- 逻辑说明:
/\d/g正则匹配字符串中所有数字字符;reduce方法完成数组的数值累加,空数组时直接返回初始值0
测试验证
getStringSum("GH2U87A")→ 2+8+7=17(符合预期)getStringSum("GHIUJUHSG")→ 无有效数字,返回0(符合预期)
内容的提问来源于stack exchange,提问作者Justin Hawkins
相关产品推荐
相关产品推荐

