2016-12-16 35 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

有關[post增量和遞減如何工作]的更多信息,請參閱此部分(http://stackoverflow.com/questions/4445706/post-increment-and-pre-increment-concept)。 –

+0

請縮進您的代碼。 – 2016-12-16 14:16:50

回答

-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

謝謝你!我對編碼完全陌生,所以還有很多我仍然不知道。一個問題:「j-1」和「j--」有什麼不同?我認爲這是一樣的。 – Emily

+0

@Emily是的,它很混亂。 'j - '將鬆散地等同於'(j = j - 1; return j + 1;)'現在你明白這個問題了嗎? –

+0

爲什麼它「返回j + 1」? – Emily

相關問題