2017-04-05 42 views
0

我想通過一個函數傳遞一個短語,以便每個第一個字母都大寫,其他所有字母都是小寫。我有以下功能:爲什麼我的for循環在函數內部使用push不起作用?

function titleCase(str) { 
    var array = []; 

    for (var i = 0; i <= str.length; i++) { 
    str = str.split(' '); 
    str = str[i].toLowerCase(); 
    str = str.charAt(0).toUpperCase() + str.substr(1, str.length); 
    array = array.push(str); 

    return array.push(str); 
    } 
} 

titleCase("SenTencE TesT"); 

沒有for循環的功能,工程和將小寫一切,然後爲每個字的第一個字母。

+1

你正在返回array.push的結果,這是一個數字 – m0meni

+2

你的返回在你的for循環中,所以它只會運行一次 –

+0

因爲你把「return array.push(str);」它會在第一次迭代時返回函數值,但是第二,第三等將永遠不會被觸發。 – Kadaj

回答

2

[編輯]

很多方法可以做到,但嘗試這個...

function titleCase(string) { 
    var array = string.split(' '); 
    var newString = ''; 
    for (var i = 0; i <= array.length-1; i++) { 
     array[i] = array[i].toLowerCase(); 
     array[i] = array[i].charAt(0).toUpperCase() + array[i].substr(1, array[i].length); 
     newString += array[i] + ' '; 
    }; 
    return newString.trim(); 
}; 

console.log(titleCase("SenTencE TesT")); 
+0

我得到以下錯誤代碼:TypeError:無法讀取未定義的屬性'toLowerCase'。 – arziankorpen

+0

在答案中查看我的編輯。 – Slime

+0

工作。謝謝您的幫助。 – arziankorpen

0

1)不要命名變量數組,這是一個JavaScript保留字,你可以使用「arr」作爲例子。

2)在你的代碼中,你正在將句子拆分成一個單詞數組,但是你只將toLowerCase應用到第一個單詞。

3)有達到你想要的結果更清潔的方式:

function capitalize(str) { 
    return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); 
} 
console.log(capitalize("sentence TesT")); 

希望它能幫助。

+0

這隻適用於第一個字母,例如它將'句子TesT'轉換爲'句子測試',但我正在尋找的是'句子測試',並且在第二個單詞上也首字母大寫。 – arziankorpen

+0

我猜Waxi回答了你的問題:) –

相關問題