2011-09-24 73 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