为什么我必须将我的字符串推入一个数组才能再次加入它?
Why do I have to push my string into an array only to join it back again?
所以我想把字符串中每个单词的首字母大写。这是我的做法:
function LetterCapitalize(str) {
var arr = str.split(" ");
var newArr = [];
for(i = 0; i < arr.length; i++) {
var newStr = arr[i].toString();
newArr.push(newStr.substring(0,1).toUpperCase() + newStr.substring(1,newStr.length));
}
return newArr.join(" ");
}
此代码正确,字符串中每个单词的首字母都大写了。然而,当我试图像这样缩短我的代码时,它只返回首字母大写的字符串的最后一个单词,但没有别的:
function LetterCapitalize(str) {
var arr = str.split(" ");
var newArr = [];
for(i = 0; i < arr.length; i++) {
var newStr = arr[i].toString();
}
return newStr.substring(0,1).toUpperCase() + newStr.substring(1,newStr.length);
}
基本上,我所做的是删除将新字符串推入新数组的部分,只是为了将其重新加入到字符串中。
你可以通过replace函数实现,无需拆分。
function LetterCapitalize(str) {
return str.replace(/(^| )([a-z])/g, function(x,y,z) {
return y+z.toUpperCase()
}
)
}
console.log(LetterCapitalize('foo bar buz'))
问题出在 for
循环部分代码中。在每次迭代中,newstr
得到 arr[i].toString();
的值,旧值即 newStr
中的 arr[i-1].toString();
被覆盖。因此只有最后一次迭代值存储在 newStr
for(i = 0; i < arr.length; i++) {
var newStr = arr[i].toString();
}
试试这个:
function LetterCapitalize(str) {
var arr = str.split(" ");
var newStr = "";
for(i = 0; i < arr.length; i++) {
var temp = arr[i].toString();
newStr = newStr + temp.substring(0,1).toUpperCase() + temp.substring(1,temp.length)+" ";
}
return newStr;
}
alert(LetterCapitalize("hello i am rohit "));
也许您对 MAP 功能中的 return 感到困惑:
function LetterCapitalize(str) {
var arr = str.split(" "),
newArr = arr.map(
function(word) {
return word.substring(0,1).toUpperCase() + word.substring(1);
});
return newArr.join(" ");
}
alert(LetterCapitalize("This is a test"))
所以我想把字符串中每个单词的首字母大写。这是我的做法:
function LetterCapitalize(str) {
var arr = str.split(" ");
var newArr = [];
for(i = 0; i < arr.length; i++) {
var newStr = arr[i].toString();
newArr.push(newStr.substring(0,1).toUpperCase() + newStr.substring(1,newStr.length));
}
return newArr.join(" ");
}
此代码正确,字符串中每个单词的首字母都大写了。然而,当我试图像这样缩短我的代码时,它只返回首字母大写的字符串的最后一个单词,但没有别的:
function LetterCapitalize(str) {
var arr = str.split(" ");
var newArr = [];
for(i = 0; i < arr.length; i++) {
var newStr = arr[i].toString();
}
return newStr.substring(0,1).toUpperCase() + newStr.substring(1,newStr.length);
}
基本上,我所做的是删除将新字符串推入新数组的部分,只是为了将其重新加入到字符串中。
你可以通过replace函数实现,无需拆分。
function LetterCapitalize(str) {
return str.replace(/(^| )([a-z])/g, function(x,y,z) {
return y+z.toUpperCase()
}
)
}
console.log(LetterCapitalize('foo bar buz'))
问题出在 for
循环部分代码中。在每次迭代中,newstr
得到 arr[i].toString();
的值,旧值即 newStr
中的 arr[i-1].toString();
被覆盖。因此只有最后一次迭代值存储在 newStr
for(i = 0; i < arr.length; i++) {
var newStr = arr[i].toString();
}
试试这个:
function LetterCapitalize(str) {
var arr = str.split(" ");
var newStr = "";
for(i = 0; i < arr.length; i++) {
var temp = arr[i].toString();
newStr = newStr + temp.substring(0,1).toUpperCase() + temp.substring(1,temp.length)+" ";
}
return newStr;
}
alert(LetterCapitalize("hello i am rohit "));
也许您对 MAP 功能中的 return 感到困惑:
function LetterCapitalize(str) {
var arr = str.split(" "),
newArr = arr.map(
function(word) {
return word.substring(0,1).toUpperCase() + word.substring(1);
});
return newArr.join(" ");
}
alert(LetterCapitalize("This is a test"))