sumAscii函数问题:应返回最高ASCII得分姓名却返回总分,求修正
修正sumAscii函数以实现需求
需求说明
接收一个姓名数组,计算每个姓名的得分(得分由每个字符转换为小写后的ASCII值总和构成),并返回得分最高的姓名。示例:姓名'John'的得分为431,因为'j'的ASCII码是106,'o'是111,'h'是104,'n'是110。
原代码存在的问题
getAsciiScore函数没有接收单个姓名参数,反而遍历整个输入数组,计算的是所有姓名的ASCII总分,而非单个姓名的得分- 外层循环逻辑混乱,嵌套遍历字符后直接返回,没有完成所有姓名的遍历和比较,根本无法找到得分最高的姓名
修正后的代码
function sumAscii(arrayOfNames) { // 计算单个姓名的ASCII得分 function getAsciiScore(name) { let sum = 0; for (const letter of name) { sum += letter.toLowerCase().charCodeAt(0); } return sum; } let highestScore = -1; let topName = ''; // 遍历所有姓名,找出得分最高的 for (const name of arrayOfNames) { const currentScore = getAsciiScore(name); if (currentScore > highestScore) { highestScore = currentScore; topName = name; } } return topName; }
修正要点
- 重构
getAsciiScore:让它只负责计算单个姓名的得分,接收name作为参数,遍历该姓名的每个字符,累加小写后的ASCII值 - 主函数初始化最高得分(设为-1,确保任何有效姓名的得分都能覆盖初始值)和对应姓名变量
- 遍历数组中的每个姓名,计算其得分后与当前最高得分对比,若更高则更新记录
- 最终返回得分最高的姓名(若多个姓名得分相同,会返回第一个出现的最高分姓名)
内容的提问来源于stack exchange,提问作者Garden Darts
相关产品推荐
相关产品推荐

