所以我想将字符串中每个单词的首字母大写。我是这样做的:
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);
}
基本上,我所做的就是删除将新字符串插入新数组的部分,只是将其重新连接回字符串。
最佳答案
问题出在 for
循环部分代码中。在每次迭代中,newstr
都会获取 arr[i].toString();
的值和旧值,即 arr[i-1].toString( );
被覆盖。因此,只有最后一次迭代的值存储在 newStr
中的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 "));
关于javascript - 为什么我必须将字符串插入数组才能再次将其连接回来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31901613/