2016-08-20 10 views
0

これは私が初めてここに投稿したものです。for/inループ内のカウンタ変数

私は任意の文字列の各単語の最初の文字を大文字にしようとしています。私は文字列を別々の文字に分割し、for/inループを使って各文字を調べました。

は、ここで私がこれまで持っているものだ:私はエラーを得続ける

function LetterCapitalize(str) { 

    var split = str.split(''); 

    for (var i in split) { 
    if (i === 0) { 
     split[i] = split[i].toUpperCase(); 
    } else if (split[i] === " ") { 
     split[i+1] = split[i+1].toUpperCase(); 
    } 
    } 

    str = split.join(''); 

    return str; 

} 

console.log(LetterCapitalize('hello world')); 

「キャッチされない例外TypeError:プロパティを読み取ることができません。 『私が間違っているのは何

』未定義の」のtoUpperCase。私がやろうとしていることをするためのより良い方法は何ですか?

+1

別のオプション、あなたは 'テキスト変換して、代わりにCSSを使用することができます生かす;' :) – Delosdos

+2

http://stackoverflow.com([のために...アレイとin' '使用しないでください]/questions/500504/why-is-for-with-with-array-iteration-a-bad-idea)を使用します。 'i'は文字列なので、インデックス5では' "5" +1 === "51" 'となります。 – JJJ

+0

母、はい!これは、私が言語を学ぶのを助けるためのjavascript思考運動の多くとして意味された、CSSはだますだろう:) – anytimesoon

答えて

2

これをチェックしてください!

var str = 'i am a string'; 
var arr = str.split(' '); 

var final_str = arr.map(function (item) { 
    return item[0].toUpperCase()+item.slice(1); 
}).join(' '); 

console.log(final_str); 
+0

それは素晴らしい解決策です!よくできました!私よりも控えめです:-) –

+0

これはすばらしく見えますが、strがfinal_strにどのように渡されるのか分かりません。これは別々に行う必要がありますか? – anytimesoon

+0

単語の配列からfinal_strを取得するには、2つの手順を実行する必要があります。最初に各要素を調べ、それを大文字にする=>そうすれば、大文字の単語の新しい配列が得られます。第2に、処理されたすべての要素をスペース文字で結合する必要があります – KmasterYC

関連する問題