Javascript For循环:分配给角色不起作用

时间:2014-05-20 13:37:07

标签: javascript string for-loop substring

我正在编写一个测试函数来大写句子中的每个单词。我最终解决了它;然而,我认为解决问题的第一次尝试之一并没有奏效。

function capSentence(str) { 
  var strArray = str.split(" ");
  var answer = '';
  var temp = '';
  for(var i = 0; i < strArray.length; i++){
    strArray[i][0] = strArray[i][0].toUpperCase();
    answer += strArray[i];
    if(i !== strArray.length-1){
      answer += ' ';
    }
  }
  return answer; 

}

capSentence("this is a test");

我认为上面的代码会输出&#34;这是一个测试&#34;,而是输出&#34;这是一个测试&#34;。

strArray[i][0] = strArray[i][0].toUpperCase();

似乎没有任何影响。那是为什么?

3 个答案:

答案 0 :(得分:1)

@ thefourtheye的评论是正确的。你需要建立一个新的字符串。

function capSentence(str) { 
  var strArray = str.split(" ");
  var answer = '';
  var temp = '';

  for(var i = 0; i < strArray.length; i++){
      answer += strArray[i][0].toUpperCase();
      answer += strArray[i].slice(1,strArray[i].length);

      if(i !== strArray.length-1){
        answer += ' ';
      }
   }

   return answer;

}

答案 1 :(得分:0)

字符串在Javascript中是不可变的。这就是为什么你无法改变strArray的值。

但你可以这样做:

function capSentence(str) { 
  strArray = str.split(" ");
  console.log(strArray);
  var answer = '';
  var temp = '';
  for(var i = 0; i < strArray.length; i++){

    for (var j = 0; j< strArray[i].length; j++) {
       if(j==0) {
          temp = strArray[i][j].toUpperCase();
       }  else {
         temp+=strArray[i][j];
       }
    }

    answer += temp;
    if(i !== strArray.length-1){
      answer += ' ';
    }
  }
  return answer; 

}

这将退回"This Is A Test"

答案 2 :(得分:0)

试试这个简单的代码段,

function capSentence(str) {
 var strArray = str.split(" ");
 var answer = '';
 var temp = '';
 for(var i = 0; i < strArray.length; i++){
  answer += (strArray[i].substring(0,1)).toUpperCase()+strArray[i].substring(1);
  if(i !== strArray.length-1){
   answer += ' ';
  }
 }
 return answer;
}