function titleCase(str) {
var str1 = str.match(/\S+\s*/g);
var str2;
for(var i = 0; i < str1.length; i++){
str2 = str1[i].toLowerCase().replace(str1[i].charAt(0), str1[i].charAt(0).toUpperCase());
}
return str2.join(' ');
}
titleCase("I'm a little tea pot");
我的代码有什么问题吗? str2.join 不是函数
最佳答案
最简单的方法是在每个空格上分割字符串,然后将数组中每个元素的第一个字母设置为该字母的大写版本,然后将其连接回来。
您所做的是将结果的值分配给 str2,具有字符串类型而不是数组,这就是 join 不适合您的原因。
function titleCase(str) {
const words = str.split(' ');
for (let i = 0; i < words.length; i++) {
words[i] = words[i][0].toUpperCase() + words[i].slice(1);
}
return words.join(' ');
}
一个稍微不同的变体,有一些 ES6 的青睐:
const titleCase = str => {
const result = [];
for (const word of str.split(' ')) {
result.push(word[0].toUpperCase() + word.slice(1));
}
return result.join(' ');
};
如果您想确保制表符、换行符等空格字符正常工作,您可以使用正则表达式进行拆分或第一步将所有空白字符替换为空格,例如:
const words = str.replace(/\s/g, ' ').split(' ').filter(word => word !== '');
关于javascript - 我的代码有什么问题吗?每个单词的第一个字母应大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48637729/