2016-06-13 53 views
0

我一直在努力使用Javascript進行編程。我的擔心之一是我的代碼有效,但我不知道它是否有效。我覺得我一直在解決問題而不是解決問題。例如:Javascript效率

function titleCase(str) { 
 
    var words = str.split(' '); 
 
    for(var i = 0; i<words.length;i++){ 
 
    words[i] = words[i].toLowerCase(); 
 
    letters = words[i].split(''); 
 
    letters[0] = letters[0].toUpperCase(); 
 
    word = letters.join(''); 
 
    words[i] = word; 
 
    } 
 
    str = words.toString().replace(/,/g," "); 
 
    console.log(str); 
 
    return str; 
 
} 
 

 
titleCase("I'm a little tea pot");

我覺得必須有一個更好的方式來做事。有沒有人有任何建議1)如何學習更有效的做事方式2)你如何清理這些代碼?

多謝

+4

退房[代碼審查(HTTP ://codereview.stackexchange.com/) –

+4

投票關閉,因爲問題更適合於[CodeReview](http://codereview.stackexchange.com/) – trincot

+0

而不是'letters = words [i] .split ('');'to'words [i] = word;',你可以簡單地寫出'words [i] [0] = word S [I] [0] .toUpperCase();'。不需要分割字符串來訪問它的字母。替代'words.toString()。replace(/,/ g,「」);'use'words = words.join(「」)'。 – Xufox

回答

3

,直到你發現這是一個問題,我不會擔心你的程序的速度的長期效率。

在乾淨的代碼和可讀性方面,高階函數通常比for循環更好:

function titleCase (string) { 
    return string.split(' ').map(function(word) { 
    return word[0].toUpperCase() + word.slice(1) 
    }).join(' '); 
} 

或者在ES6更快:

const titleCase = (str) => 
    str.split(' ') 
    .map(word => word[0].toUpperCase() + word.slice(1)) 
    .join(' ') 
+1

爲了使事情更「官方」,使用'.charAt(0)'而不是'[0]' –