【问题标题】:Javascript For Loop: Assignment to character not workingJavascript For Loop:分配给字符不起作用
【发布时间】:2014-05-20 13:37:06
【问题描述】:

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

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");

我以为上面的代码会输出“这是一个测试”,但它却输出了“这是一个测试”。

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

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

【问题讨论】:

标签: javascript string for-loop substring


【解决方案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;

}

【讨论】:

    【解决方案2】:

    字符串在 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"

    【讨论】:

      【解决方案3】:

      试试这个简单的 sn-p,

      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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-20
        • 1970-01-01
        • 1970-01-01
        • 2012-11-13
        • 2016-04-24
        • 1970-01-01
        相关资源
        最近更新 更多