JavaScript大小写字符串生成函数问题:字符格式不符合预期
问题分析与修复
问题原因
你的代码输出A-HH-Ttt-Uuuu-Eeeee不符合预期,核心问题有两个:
- 变量复用污染:处理第二个字符后,
char被修改为大写的H,下一次循环时先把这个大写H拼入结果,导致出现HH。 - 循环逻辑混乱:外层循环范围错误(
i <= s.length会多循环一次,处理空字符),且依赖上一次循环的char变量拼接,逻辑顺序颠倒。
修复方案(简洁版)
用数组map遍历每个字符,独立生成对应格式的片段,最后用连字符拼接,逻辑清晰不易出错:
function accum(s) { return s.split('').map((char, index) => { // 首字符大写,后续拼接index个小写字符 return char.toUpperCase() + char.toLowerCase().repeat(index); }).join('-'); } console.log(accum("aHtuE")); // 输出:A-Hh-Ttt-Uuuu-Eeeee
原代码修改版(保留循环写法)
如果想沿用循环逻辑,需避免变量复用,独立处理每个字符片段:
function accum(s) { let result = []; // 处理第一个字符(索引0) result.push(s[0].toUpperCase()); for (let i = 1; i < s.length; i++) { const current = s[i]; const segment = current.toUpperCase() + current.toLowerCase().repeat(i); result.push(segment); } return result.join('-'); }
内容的提问来源于stack exchange,提问作者nBar
相关产品推荐
相关产品推荐

