如何将JavaScript for循环转换为CoffeeScript?

时间:2011-09-07 16:29:21

标签: for-loop coffeescript

for (i = 0; i < 10; i++) {

    doStuff();

}

这是我想要转换为CoffeeScript的JavaScript代码。

3 个答案:

答案 0 :(得分:109)

doStuff() for i in [0 .. 9]

在介绍页面上对此进行了解释:http://coffeescript.org/#loops

由JP编辑/更新:

确切的翻译是:

doStuff() for i in [0...10]

你需要小心“..”vs“...”,例如:

count = 0
doStuff() for i in [0..count] #still executes once!

所以你想,没问题......我会循环直到count-1!

count = 0
doStuff() for i in [0..count-1] #executes twice!! '0' and then '-1'

直译:

for (var i = 0; i < someCount; ++i)
  doStuff()

for i in [0...someCount]
  doStuff()   

答案 1 :(得分:19)

标记的答案功能正确,但生成的代码与原始javascript不匹配 正确的方式(读取,最接近以下javascript的那个)

for (i = 0; i < 10; i++) {
  doStuff();
}

doStuff() for i in [0..someCount] by 1 请注意for循环上的 by 1

现在这段代码仍会创建一个额外的_i变量。如果你不能忍受它,那么使用以下内容:

i=0
while i<=someCount
  doStuff()
  i++

答案 2 :(得分:1)

以前的答案有效。但是,放弃i会让我更好地生成它:

for [0...10]
  doStuff()

doStuff() for [0...10]

其他解决方案添加了一个额外的迭代器变量i供您在循环内部使用,例如doStuff(i),但来自http://coffeescript.org/v1/#loops

  

如果您不需要当前的迭代值,可以省略它:

     

browser.closeCurrentTab() for [0...count]

详细而言,for i in [0...10]的翻译为for (i = j = 0; j < 10; i = ++j),而for [0...10]的翻译为for (i = 0; i < 10; i++)

请注意其他评论中有关2点与3点([0..9][0...10])的讨论。