【问题标题】:Why won't array[i].charAt(0).toUpperCase() pass on to array[i][0] [duplicate]为什么 array[i].charAt(0).toUpperCase() 不会传递给 array[i][0] [重复]
【发布时间】:2015-12-21 08:18:29
【问题描述】:

我正在尝试制作一个 javascript 程序,它接受一个字符串并将每个单词的第一个字母大写,并将所有其他字符变为小写。

function titleCase(str) {
  str = str.toLowerCase();
  var array = str.split(" ");
  for(var i =0; i< array.length ; i++){
    array[i][0] = array[i].charAt(0).toUpperCase();

  } 
  var finalString = array.join(" ")
  return finalString ; 
}

console.log(titleCase("I'm a little tea pot"));

由于某种原因,array[i].charAt(0).toUpperCase(); 不会将其值传递给array[i][0]。这最终使它返回所有小写字母的字符串,而不是将每个单词的第一个字母大写。

【问题讨论】:

  • 你不能像array[i][0]那样索引字符串

标签: javascript arrays


【解决方案1】:

听起来你想做更多这样的事情:

function titleCase(str) {
  str = str.toLowerCase();
  var array = str.split(" ");
  for(var i =0; i< array.length ; i++){
    //array[i] is an immutable string. So we need to rebuild it instead.
    array[i] = array[i].charAt(0).toUpperCase() + array[i].substring(1);
  } 
  var finalString = array.join(" ")
  return finalString; 
}

titleCase("I'm a little tea pot");

字符串可以使用括号表示法读取为字符数组。但是,您不能以这种方式更改特定字符,因为字符串不是可变对象。

【讨论】:

    【解决方案2】:

    toUpperCase()方法返回字符串转换为大写的值,但不影响字符串本身的值。

    【讨论】:

    • 感谢您解决了我的问题。我没有意识到你不能索引单个字符。
    【解决方案3】:

    JavaScript 字符串是不可变的,因此您实际上无法通过使用 [] 运算符对单个字符进行索引来更改它们。这是一个使用substring 来构建最终字符串的固定版本:

    现场演示:

    function titleCase(str) {
      str = str.toLowerCase();
      var array = str.split(" ");
      for(var i =0; i< array.length ; i++){
        array[i] = array[i].charAt(0).toUpperCase() + array[i].substring(1);
    
      } 
       var finalString = array.join(" ")
      return finalString ; 
    }
    
    alert(titleCase("I'm a little tea pot"));

    JSFiddle 版本:https://jsfiddle.net/rakdtpbb/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2011-07-27
      • 2023-03-29
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 2012-10-20
      相关资源
      最近更新 更多