我试图为一个字符串标题,该字符串仅大写每个单词中的第一个字符。 我尝试使用以下代码执行此操作。这是我迄今为止所做的。
function titleCase(str) {
var lowstr = str.toUpperCase();
var array=lowstr.split(' ');
var arr;
var arr1;
for(var i=0;i<array.length;i++)
{
arr1=array[i].substring(0,1);
for(var j=0;j<array[i].length;j++)
{
arr=array[j].substring(1).toLowerCase();
}
arr=arr1.concat(arr);
}
array.join(" ");
return array;
}
titleCase("I'm a little tea pot");
&#13;
答案 0 :(得分:2)
看起来好像你试图在titleCase
功能中做太多。我会稍微采用一种略微不同的方法,即单一责任原则。
我会...
function titleCaseSingleWord(word) {
if (word.length === 0) {
return "";
}
var result = word[0].toUpperCase();
for (var i = 1; i < word.length; i++) {
result += word[i].toLowerCase();
}
return result;
}
function titleCaseSentence(sentence) {
var titleCasedWords = [];
var words = sentence.split(" ");
for (var i = 0; i < words.length; i++) {
var word = words[i];
var titleCasedWord = titleCaseSingleWord(word);
titleCasedWords.push(titleCasedWord);
}
return titleCasedWords.join(" ");
}
console.log(titleCaseSentence("im a liTTLE teapot"));
// "Im A Little Teapot"
这些功能有点乱,可以做一些重构,但我会把它留给你作为一个小型练习。
此外,可以进一步说明titleCaseSentence
正在分割单词和 titleCasing它们,因此它应该进一步拆分。无论你是否愿意这样做,这完全取决于你。
答案 1 :(得分:1)
正则表达式解决问题的方法:
console.log(
//Base string
"i'm a little tea pot"
//Enforce lowercase
.toLowerCase()
//Regular expression replace with uppercase
.replace(
/(\s+.)|^\w/ig,
function(v) {
return v.toUpperCase();
})
);
&#13;
答案 2 :(得分:0)
你将它们全部设置为大写,然后找到应该是小写的字母。
我所做的恰恰相反。我开始用
开始 arr = str.split(" ")
然后你可以去
for(var x = 0; x < arr.length; x++)
arr[x].substring(0,1) = arr[x].substring(0,1).toUpperCase()
然后加入他们。
无法理解为什么你需要一个嵌套循环。
答案 3 :(得分:0)
如果你愿意放弃子串并考虑更多功能性的话。方法,试试这个。
String.prototype.titleCase = function() {
t = this.toLower().split(' ').map((word) => word.charAt(0).toUpperCase()+word.slice(1)).join(' ');
return t;
}
由于我已经在String.prototype上声明了该函数,因此可以使用它:
"This is a title".titleCase() // >> "This Is A Title"
这可能不是报纸编辑所拥有的100%,但它确实是你希望它做的事情。如果您需要解释,请告诉我。
此外,如果您希望使用函数:TitleCase("some sentence here")
,您可以轻松地重构代码。如果您需要进一步解释,请告诉我。
答案 4 :(得分:-1)
检查出来..
function titleCase(str) {
var arr=str.split('');
var array=[];
for(var x=0;x<arr.length;x++)
{ if(x==0){
array[x]=arr[x].toUpperCase();
x++;
}
array[x]=arr[x].toLowerCase();
if(arr[x]==' ')
{
array[x+1]=arr[x+1].toUpperCase();
x++;
}
}
var st=array.join('');
return st;
}
titleCase("I'm a little tea pot");