为啥 array[i].charAt(0).toUpperCase() 不会传递给 array[i][0] [重复]

Posted

技术标签:

【中文标题】为啥 array[i].charAt(0).toUpperCase() 不会传递给 array[i][0] [重复]【英文标题】: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]那样索引字符串 【参考方案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/

【讨论】:

以上是关于为啥 array[i].charAt(0).toUpperCase() 不会传递给 array[i][0] [重复]的主要内容,如果未能解决你的问题,请参考以下文章

句中单词首字母大写 确保字符串的每个单词首字母都大写,其余部分小写。

javascript字符串 转 驼峰字符

算法题

[Java]遍历字符串.length(), .charAt()

[Java]遍历字符串.length(), .charAt()

charAt() 还是子字符串?哪个更快?