大写每个字符串的第一个字母

时间:2017-09-30 07:44:39

标签: javascript

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

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");

6 个答案:

答案 0 :(得分:3)

尝试如下:(参见代码中的评论)

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)

字符串有替换方法,该方法接受一个函数:

//using alert controller code in this class.

showAlert(){
title: 'static',
subtitle: '',  // need to add this message dynamically from the function that called the showAlert() function.

button: [Okay];
}
//code implemented.

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

您可以合并splitmap功能来实现此目标。

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"));

答案 4 :(得分:1)

使用split,array map和reduce:

&#13;
&#13;
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);
&#13;
&#13;
&#13;

也可以使用Join代替reduce:

&#13;
&#13;
    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);
&#13;
&#13;
&#13;

答案 5 :(得分:1)

您可以使用map函数创建修改后的单词数组,并使用join重新创建字符串

&#13;
&#13;
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"));
&#13;
&#13;
&#13;

仅使用CSS

&#13;
&#13;
#test {
  text-transform: capitalize
}
&#13;
<div id="test"> I'm a little tea pot</div>
&#13;
&#13;
&#13;