【问题标题】:Which is better/more efficient in coffeescript when running a for loop?运行 for 循环时,coffeescript 中哪个更好/更有效?
【发布时间】:2011-09-24 10:58:46
【问题描述】:

在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 - 这是为什么?

【问题讨论】:

  • 大约快 1 微秒(在我的机器上),我会给你...(0.533ms vs 1.64ms)

标签: javascript loops coffeescript


【解决方案1】:

第一个更优雅,更高效。第二个不必要地将字符串的每个字符复制到一个单独的字符串,然后再将其转换为charCode

【讨论】:

  • 我一开始想知道获取字符串中某个位置的字符码是否会根据字符串的长度而及时增加,但仔细想想,如果有,差异可以忽略不计与为每个字符创建单独的字符串所花费的时间相比。谢谢! :)
【解决方案2】:

你熟悉functional programming吗? Coffeescript + Underscore.js 一起工作非常棒。您可以使用 ECMAScript 5 中定义的原生 Array#reduce 或下划线函数。第一个例子:

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

【讨论】:

    猜你喜欢
    • 2023-02-22
    • 1970-01-01
    • 2017-03-11
    • 2013-02-22
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 2011-01-07
    相关资源
    最近更新 更多