You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Free Code Camp:Title Case A Sentence挑战JS代码问题排查

问题分析与解决方案:Title Case a Sentence 挑战

嘿,我来帮你排查下这个问题的根源!你的代码里有几个容易踩的字符串操作坑,导致第二个条件没生效,咱们一步步来看:

核心问题点

  • 字符串是不可变的,方法返回新值而非原地修改
    你写的 str.toLocaleLowerCase(); 其实执行了,但没有把返回的全小写字符串重新赋值给 str,所以后续的拆分操作还是基于原字符串的字符,根本没完成全局转小写的步骤。
    同样,letter.toUpperCase(); 这行只是生成了一个大写的新字符,但你没把这个结果赋值回 letter,所以 letterArray[i] 还是原来的字符,相当于没做任何修改。

  • 遗漏了非首字母的小写处理
    你的代码只关注了单词首字母的大写逻辑,但没有把其他字母统一转成小写——如果原字符串里有大写字母(比如示例里的"I'm"),这些字母不会被修正为小写。

修复后的代码(基于你的原逻辑)

我们把上面的坑填上,就能得到正确的结果:

function titleCase(str) {
  // 把全小写的字符串赋值回str,覆盖原字符串
  str = str.toLocaleLowerCase();
  var letterArray = str.split("");
  
  for (var i = 0; i < letterArray.length; i++) {
    if (i === 0) {
      // 直接将首字母大写后赋值回数组
      letterArray[0] = letterArray[0].toUpperCase();
    } else if (letterArray[i - 1] === " ") {
      // 空格后的字母大写后赋值回数组
      letterArray[i] = letterArray[i].toUpperCase();
    }
  }
  
  return letterArray.join("");
}

titleCase("I'm a little tea pot"); // 返回 "I'm A Little Tea Pot"

更简洁的实现方案

如果想让逻辑更清晰,也可以把字符串拆成单词数组来处理,每个单词单独做首字母大写:

function titleCase(str) {
  return str.toLowerCase().split(' ').map(word => {
    // 兼容连续空格的情况(避免word为undefined)
    return word ? word[0].toUpperCase() + word.slice(1) : word;
  }).join(' ');
}

这个写法先把整个字符串转小写,拆成单词后,每个单词取首字母大写,再拼接剩余的小写字母,最后把单词数组重新拼成字符串,逻辑更直观,还能处理连续空格的边界场景。

内容的提问来源于stack exchange,提问作者Alon Parag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:51:24