为啥 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] [重复]的主要内容,如果未能解决你的问题,请参考以下文章
句中单词首字母大写 确保字符串的每个单词首字母都大写,其余部分小写。
[Java]遍历字符串.length(), .charAt()