在javascript中编写以下函数有两种功能相同的方法,哪种更好或更有效,为什么?
(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 :(得分:5)
第一个更优雅,更高效。第二个字符串在转换为charCode
之前,不必要地将字符串的每个字符复制到一个单独的字符串。
答案 1 :(得分:1)
您熟悉functional programming吗? Coffeescript + Underscore.js一起工作非常棒。您可以使用ECMAScript 5上定义的本机Array#reduce
或下划线功能。第一个例子:
(s.charCodeAt(0) for s in "hello").reduce((acc, x) -> acc + x) # 532