web-dev-qa-db-ja.com

JavaScriptのforループをCoffeeScriptに変換するにはどうすればよいですか?

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

    doStuff();

}

これが、CoffeeScriptに変換したいJavaScriptコードです。

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

これは紹介ページで説明されています: http://coffeescript.org/#loops

JPによる編集/更新:

正確な翻訳は次のとおりです。

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

たとえば、「..」と「...」に注意する必要があります。

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

だからあなたは、問題ないと思います...私はカウント-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()   
110
jontro

マークされた答えは機能的には正しいが、生成されたコードは元の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++
_
19
Olivier Refalo

以前の回答が機能します。ただし、iをドロップすると、より適切に生成されます。

_for [0...10]
  doStuff()
_

または

_doStuff() for [0...10]
_

他のソリューションは、ループ内で使用するための追加のイテレータ変数iを追加します。たとえば、doStuff(i)ですが、 http://coffeescript.org/v1/#ループ

現在の反復値が必要ない場合は、省略できます。

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]_)に関する他のコメントの説明に注意してください。

1
stevo