Javascript 将每个单词的第一个字母大写,不';I don’我没有按预期工作

Javascript 将每个单词的第一个字母大写,不';I don’我没有按预期工作,javascript,Javascript,首先,我知道这不是正确的做法,但我想了解为什么会发生这种情况,这样我才能更好地理解语言 function titleCase(str) { let str1 = str.toLowerCase(); str1 = str1.replace(str1[0], str1[0].toUpperCase()); console.log(str1); for(let i=1; i < str1.length; i++){ if(str1[i]===' '){ s

首先,我知道这不是正确的做法,但我想了解为什么会发生这种情况,这样我才能更好地理解语言

function titleCase(str) {
  let str1 = str.toLowerCase();
  str1 = str1.replace(str1[0], str1[0].toUpperCase());
  console.log(str1);

  for(let i=1; i < str1.length; i++){
    if(str1[i]===' '){
      str1 = str1.replace(str1[i+1], str1[i+1].toUpperCase());
      console.log(i);
      console.log(str1);
    }
  }
  return str1;
}

titleCase("ab cd ef gh ba");
功能滴定酶(str){
设str1=str.toLowerCase();
str1=str1.replace(str1[0],str1[0].toUpperCase());
控制台日志(str1);
for(设i=1;i
因此,如果最后一个单词的第一个字母在工作之前在任何单词中都不是倒数第二个字母,“ab cd ef gh”在这里没有问题,但是“ab cd ef gh ba”会导致以下输出:“ab cd ef gh ba”等。。
谢谢

这将替换字符串中第一个出现的字符。因此,较早位置的字符也可能被替换

str1 = str1.replace(str1[i+1], str1[i+1].toUpperCase());

发生这种情况的原因是
.replace()
函数将替换第一次出现的事件

"Tell us more about your question us"
第一次找到空格时,它将替换第一次出现的小写字母“u”,该字母恰好是正确的:

"Tell us more about your question us"
//    ^ this "u" happens to be the first occurrence
当谈到最后一个词“我们”时,它会再次尝试找出小写“u”的第一个出现,它是单词“the”的中间部分:


对于这种类型的sring替换,我宁愿使用regex

使用/\b(.)/g作为第一个字母的模式,使用\U$0作为替换字符串,应该可以按预期工作

这是一把小提琴


您的功能逻辑不正确。您需要重新考虑它。对于记录,此函数会更好:
titleCase=str=>str.replace(/\b[a-z]/,x=>x.toUpperCase())
我想说,
替换
并不像你想象的那样。它不采用索引,而是采用字符串值(或单个字符),并替换其第一次出现的内容。我假设这就是您提到的,您知道这不是正确的方法,但很可能不是:python有一种简单的方法可以做到这一点:
"Tell Us More About Your Question us"
//               ^ this "u" is now the first lowercase "u"