簡體   English   中英

為什么我必須將我的字符串推入數組中才能再次將其重新加入?

[英]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);

}

基本上,我所做的是刪除將新字符串推入新數組的部分,只是將其重新組合為字符串。

問題出在for循環零件代碼中。 在這里,每次迭代時newstr獲得arr[i].toString();的值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 ")); 

也許您對MAP功能的返回感到困惑:

 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) { 
  return str.replace(/(^| )([a-z])/g, function(x,y,z) {
    return y+z.toUpperCase()
  }
    )
}
console.log(LetterCapitalize('foo bar buz'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM