关于修复sumNums函数连续数字求和错误的技术求助
修复sumNums函数的连续数字求和问题
问题分析
原代码的核心问题是逐个遍历字符串字符,将连续数字拆分为单个数字累加,比如输入包含"964"时,会计算成9+6+4=19,而非需求要求的整体数字964。这是因为循环中每次只处理单个字符,/^\d+$/正则在这里仅起到判断单个字符是否为数字的作用,完全忽略了连续数字的合并要求。
修复方案
使用正则表达式/\d+/g匹配字符串中所有连续的数字序列,将这些序列转为数字后求和;若没有匹配到任何数字,直接返回0。
修复后代码
function sumNums(str) { // 匹配所有连续数字序列,返回数组或null const numSequences = str.match(/\d+/g); // 无匹配则返回0 if (!numSequences) return 0; // 遍历匹配结果,转数字后累加求和 return numSequences.reduce((total, numStr) => total + Number(numStr), 0); }
验证示例
所有测试用例均符合预期:
sumNums('')→ 0sumNums('abcdef')→ 0sumNums('1')→ 1sumNums('123')→ 123sumNums('1hello2')→ 3sumNums('12hiya!3')→ 15- 针对导致断言错误的输入(如包含"964"的字符串),现在会正确计算出964而非19。
内容的提问来源于stack exchange,提问作者Primary Maths Worksheets
相关产品推荐
相关产品推荐

