以下函数应将句子中每个单词的首字母大写(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"));
答案 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)
您可以通过这种方式更新代码
0
或index - 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"));