FreeCodeCamp标题大小写转换函数:首个if中i++的作用解析
标题大小写转换代码中
i++的作用解析 我正在完成FreeCodeCamp的「标题大小写转换」练习,要求返回每个单词首字母大写、其余字母小写的字符串。我编写的代码可正常运行,但不理解为何在第一个if语句中添加i++能修复问题,希望解析这段代码的工作逻辑。我不需要其他实现方案,仅针对当前代码解惑。
我的代码:
function titleCase(str) { const toLowerC = str.toLowerCase(); let word = "" for (let i = 0; i < toLowerC.length; i++) { if (i === 0) { word += toLowerC[i].toUpperCase(); i++ // 为什么添加i++能让代码正常运行?我原本以为第一个和第二个if都不成立时会触发else... } if (toLowerC[i] === " ") { word += toLowerC[i] + toLowerC[i + 1].toUpperCase(); i++ } else { word += toLowerC[i] } } return word; } titleCase("I'm a little tea pot");
核心问题:第一个if里的i++为什么必须加?
先看不加这个i++的错误场景:
循环第一次执行时i=0,第一个if条件成立,把首字母转大写加到word里,但此时i仍然是0。因为这里是两个独立的if(不是else if),第一个if执行完后一定会走第二个if分支:此时toLowerC[0]不是空格,所以进入else,把toLowerC[0](小写的首字母)再次加到word里,导致首字母重复(比如输入"I'm..."会变成"Ii'm..."),结果直接错误。
添加i++后,逻辑就通顺了:
- 当
i=0时,第一个if触发,将首字母大写加入word,然后手动i++让i变成1。 - 接下来执行第二个
if判断,此时i=1对应原字符串的第二个字符(比如"I'm"里的'),不是空格,所以进入else,把这个字符正常加入word,不会重复处理首字母。 - 循环体执行完毕后,
for循环会自动执行i++,让i变成2,进入下一次循环处理第三个字符。
整体代码的工作逻辑梳理
- 先把输入字符串全部转成小写存入
toLowerC,确保后续大小写处理统一。 - 初始化空字符串
word用来拼接最终结果。 - 循环遍历
toLowerC的每个字符:- 第一个
if(处理字符串首字母):当i=0时,把首字母转大写加入word,手动i++避免后续代码重复处理这个首字母。 - 第二个
if(处理单词间空格):如果当前字符是空格,就把空格加入word,同时把空格后的字符转大写也加进去,然后手动i++——因为已经处理了空格后的字符,所以让i跳过这个字符,避免循环自动递增后再次处理它。 else分支(处理普通字符):如果既不是字符串首字母,也不是空格,就直接把当前小写字符加入word。
- 第一个
内容的提问来源于stack exchange,提问作者Dehumanizer
相关产品推荐
相关产品推荐

