关于javascript:大写每个字符串的第一个字母

Capitalize the first letter of each string

本问题已经有最佳答案,请猛点这里访问。

我一直在尝试将字符串中每个单词的第一个字母大写,但它表示TypeError: Cannot assign to read only property '0' of string 'i'。我的逻辑看起来很好,但我这样做肯定是不对的。有什么建议吗?

1
2
3
4
5
6
7
8
9
10
11
12
function titleCase(str) {
  str = str.toLowerCase();
  var word = str.split("");
  // console.log(word[0][0]);
  for (var i = 0; i < word.length - 1; i++) {
    word[i][0] = word[i][0].toUpperCase();
  }
  console.log(word);
  return word;
}

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


尝试这样做:(参见代码中的注释)

1
2
3
4
5
6
7
8
9
10
11
function titleCase(str) {
  str=str.toLowerCase();
  var word = str.split("");
  for (var i=0; i < word.length; i++) {  // you don't need -1 here as you had
    word[i] = word[i].charAt(0).toUpperCase() + word[i].slice(1); // see changes in this line
  }
  console.log(word);
  return word;
}

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


字符串具有接受函数的替换方法:

1
2
3
var s = 'foo bar fum i am sparticus 23!!';

console.log(s.replace(/\b\w/g, function(s){return s.toUpperCase()}));


您可以使用map函数创建一个修改过的单词数组,使用join重新创建字符串。

1
2
3
4
5
6
7
8
9
10
11
function titleCase(str) {
  str = str.toLowerCase();
  var word = str.split("");

  var x = word.map(function(item) {
    return item.charAt(0).toUpperCase() + item.substring(1, item.length);
  }).join("");
  return x
}

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

仅使用CSS

1
2
3
#test {
  text-transform: capitalize
}

1
 I'm a little tea pot


使用拆分、阵列映射和减少:

1
2
3
4
5
var str ="I'm a little tea pot";
var res = str.split("")
             .map(word => word.charAt(0).toUpperCase() + word.substr(1))
             .reduce((m, o) => { m = m +"" + o; return m },"")
console.log(res);

也可以使用join而不是reduce:

1
2
3
4
5
    var str ="I'm a little tea pot";
    var res = str.split("")
                 .map(word => word.charAt(0).toUpperCase() + word.substr(1))
                 .join("");
    console.log(res);


您可以结合splitmap功能来实现这一点。

1
2
3
4
5
6
7
8
9
function titleCase(str) {
  return str.toLowerCase().split("").map(function(word) {
    var _word = word.split("");
    _word[0] = _word[0].toUpperCase();
    return _word.join("");
  }).join("");
}

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


您可以通过内置的数组函数将字符串直接转换为所需的内容。使用map函数,您将直接得到它,无需运行for循环。

1
2
3
4
5
("I'm a little tea pot")
.split("")
.map(function(d){
 return d[0].toUpperCase()+d.substring(1,d.length)
}).join("")