为什么array[i].charAt(0).toUpperCase()无法传递到array[i][0]?

6

我正在尝试编写一个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] 这样的方式对字符串进行索引。 - Sean
3个回答

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/


3
听起来你想要做更像这样的事情:
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");

使用括号标记法可以将字符串 读取 为字符数组。但是,由于字符串不是可变对象,因此无法通过这种方式更改特定的字符。


0

toUpperCase() 方法返回将字符串转换为大写字母后的值,但不会改变字符串本身的值。


谢谢,问题已解决。我没有意识到无法索引单个字符。 - vin42tau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接