2011-09-24 72 views
2

在JavaScript中有以下兩種功能相當的方式來編寫以下函數,這種方法更好或更高效,爲什麼?運行for循環時哪個更好/效率更高的coffeescript?

(str) -> 
    s = 0 
    for i in [0...str.length] 
    s += str.charCodeAt i 
    s 

(str) -> 
    s = 0 
    for i in str 
    s += i.charCodeAt 0 
    s 

旁白:您能否這樣做的任何其他方法?

編輯:根據JSPerf,第一個更快:http://jsperf.com/coffee-for-loop-speed-test - 這是爲什麼?

+0

它是關於一個微秒更快(在我的機器上),我給你說......(0.533ms VS 1.64ms) –

回答

5

第一個既優雅又高效。第二個將字符串的每個字符複製到單獨的字符串中,然後將其轉換爲charCode

+0

我最初想,如果得到的字符代碼根據字符串的長度,字符串中的某個位置的時間會隨着時間的增加而增加,但是如果有的話,與每個字符創建單個字符串所用的時間相比,差異可以忽略不計。謝謝! :) – Ada

1

您是否熟悉functional programming? Coffeescript + Underscore.js一起工作是非常棒的。您可以使用ECMAScript 5上定義的原生Array#reduce或下劃線功能。例如,用於第一:

(s.charCodeAt(0) for s in "hello").reduce((acc, x) -> acc + x) # 532