如何将字符串中每个单词的首字母大写?

时间:2019-04-13 23:20:10

标签: javascript arrays string

以下函数应将句子中每个单词的首字母大写(str)!不幸的是,它不起作用,我找不到解决方案!

function titleCase(str) {
  let arr = str.toLowerCase().split(" ");
  for (let i = 0; i < arr.length; i++) {
    arr[i].charAt(0).toUpperCase();
  }
  return arr.join(" ");
}

console.log(titleCase("I'm a little tea pot"));

3 个答案:

答案 0 :(得分:3)

您需要分配字母大写的结果,并将其连接到单词的其余部分:

ord=None

使用ord=2也更容易:

function titleCase(str) {
  let arr = str.toLowerCase().split(" ");
  for (let i = 0; i < arr.length; i++) {
    arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substring(1);
  }
  return arr.join(" ");
}

console.log(titleCase("I'm a little tea pot"));

答案 1 :(得分:1)

arr是一个字符串数组,但是字符串是不可变的-仅在字符上调用toUpperCase()即可为您提供对大写字符的引用,而无需更改原始字符串。您需要显式重新分配数组项:

function titleCase(str) {
  let arr = str.toLowerCase().split(" ");
  for (let i = 0; i < arr.length; i++) {
    arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1);
  }
  return arr.join(" ");
}

console.log(titleCase("I'm a little tea pot"));

或者,也许更优雅些,您可以使用正则表达式。以下内容使用了lookbehind,可在最新版本的Chrome,Opera和Node中使用; lookbehind使代码看起来更简洁,但并非所有地方都支持它:

const titleCase = str => str.replace(
  /(?<=^|\s)\S/g,
  firstChar => firstChar.toUpperCase()
);

console.log(titleCase("I'm a little tea pot"));

或者,不带任何回味:

const titleCase = str => str.replace(
  /(\S)(\S*)/g,
  (_, firstChar, rest) => firstChar.toUpperCase() + rest
);

console.log(titleCase("I'm a little tea pot"));

答案 2 :(得分:0)

您可以通过这种方式更新代码

  • 首先将所有字符都小写
  • 遍历字符串索引
  • 如果索引是0index - 1是空格字符,请使str[index]大写
  • 保持附加字符串并返回结尾

function titleCase(str) {
 let LowerCaseStr = str.toLowerCase()
 let final =''
 for (let i = 0; i < LowerCaseStr.length; i++) {
   if(i === 0 || LowerCaseStr[i-1] === ' '){
     final += LowerCaseStr[i].toUpperCase()
   } else{
     final += LowerCaseStr[i]
   }
 }
return final
}

console.log(titleCase("I'm a little tea pot"));