2016-12-16 7 views
2

私は文中の各単語の最初の文字を大文字にしようとしています。しかし、下のコードから得られた出力は、「私はちょっとしたティーポットです。 Map関数のコールバック関数のインデックス引数がどのように機能するのか、何も見つからないという詳細な説明を見つけようとしました。それ以前の要素がスペースであれば、文字を大文字にするよう指示したい。私のコードに何が問題なのですか?.map()でコールバック関数のインデックス引数を間違って使用していますか?

function titleCase(str) { 
str= str.toLowerCase().split(""); 

var newArr= str.map(function(i,j){ 

if (j===0){ 
return i.toUpperCase();} 
else if (str[j--]===" "){ 
return i.toUpperCase(); 
} 
return i; 

}); 

return newArr.join(""); 
} 


console.log(titleCase("i'm a little tea pot")); 
+0

ねえ、エミリーは、私の説明が明確でしたか? –

+1

[ポストインクリメントとデクリメントの仕組み]の詳細については、これを参照してください(http://stackoverflow.com/questions/4445706/post-increment-and-pre-increment-concept)。 –

+0

コードをインデントしてください。 –

答えて

-1

これは狂っています。

else if (str[j--]===" ") { 

jの値を変更しています。あなたはそうしてはいけません。あなたはする必要があります:

else if (str[j-1]===" ") { 

また、それは後減少演算子です。無限ループにつながるので、これは非常に危険です。さらに、これは常に現在の値を与えます。この値は大文字をスペースに適用します。小さな変更は、それを修正することを作る

function titleCase(str) { 
 
    str = str.toLowerCase().split(""); 
 
    var newArr = str.map(function(i, j) { 
 
    if (j === 0) { 
 
     return i.toUpperCase(); 
 
    } else if (str[j-1] === " ") { 
 
     return i.toUpperCase(); 
 
    } 
 
    return i; 
 
    }); 
 
    return newArr.join(""); 
 
} 
 

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

出力:

I'm A Little Tea Pot 
+0

ありがとうございました!私はコーディングに全く新しいので、まだ分かりません。 1つの質問: "j-1"と "j--"はどう違うのですか?私はそれが同じだと思った。 – Emily

+0

@エミリーはい、混乱します。 'j - 'は '(j = j - 1; return j + 1;)と緩やかに等しくなります。'あなたはその問題を理解していますか? –

+0

なぜ「return j + 1」ですか? – Emily

関連する問題