2017-09-30 36 views
2

文字列内の各単語の最初の文字を大文字にしていますが、それは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");

+0

を、/( 's.replaceを試してみてください\ b \ w/g、s => s.toUpperCase()) '。 – RobG

答えて

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

+0

slice(1)は何をしますか? –

+0

@AhsanAliiこの場合、大文字で追加される最初の文字(小文字の文字)が削除されます。 – caramba

1

あなたが直接あなたが作り付けの配列関数で欲しいものにあなたの文字列を変換することができます。 マップ機能を使用すると、forループを実行する必要はありません。

("I'm a little tea pot") 
.split(" ") 
.map(function(d){ 
return d[0].toUpperCase()+d.substring(1,d.length) 
}).join(" ") 
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"));
分割で

1

、アレイマップとは低減:

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

も使用する代わりに減らすことができる参加します

1

あなただけのCSSを使用して文字列

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

に再作成するように変更単語とjoinの配列を作成するmap機能を使用することができます

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

2

文字列は機能を受け入れる方法置き換えている:あなたは、文字によって支払われていない場合は

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

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

関連する問題