2014-02-25 33 views
0

我想JS轉換如何for循環轉換/而美麗的CoffeeScript

var n = 50; 
force.start(); 
for (var i = 0; i < n; ++i) force.tick(); 
force.stop(); 

,我轉換像這樣的東西下面的CoffeeScript,只是不知道是否有更好的方法,這一次似乎更長?一行/列表理解?

n = 50 
force.start() 
i = 0 

while i < n 
    force.tick() 
    ++i 
force.stop() 

回答

4
force.tick() for i in [1..50] 

Transpiles到:

var i, _i; 

for (i = _i = 1; _i <= 50; i = ++_i) { 
    force.tick(); 
} 

如果你不關心反VAR(它不是在您的例子中使用),則:

force.tick() for [1..50] 

哪個transpiles到:

var _i; 

for (_i = 1; _i <= 50; _i++) { 
    force.tick(); 
} 
2

戴夫·牛頓發表了包含範圍的一個例子,使用兩個時期:

force.tick() for i in [1..50] 

您也可以使用(使用三個週期)獨家範圍,這更加緊密地模仿你的原代碼。

force.tick() for i in [0...50] 

當然,你可以保持n作爲變量:

n = 50 
force.tick() for i in [0...n] 

http://elegantcode.com/2011/08/02/exploring-coffeescript-part-5-ranges-loops-and-comprehensions/

如果你沒有任何必要的變量i,你可以離開它:

n = 50 
force.tick() for [0...n] 

請參閱Equivalent Ruby .times in Coffeescript

+0

+1,我喜歡在不需要時忽略var。 –