Как преобразовать JavaScript for-loop в CoffeeScript?

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

    doStuff();

}

Что код JavaScript, который я хочу преобразовать в CoffeeScript.

Ответ 1

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!

Итак, вы думаете, не проблема... Я просто зациклирую до 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()   

Ответ 2

Отмеченный ответ функционально правильный, но сгенерированный код не соответствует оригинальному javascript.
Правильный путь (читайте, ближайший к следующему javascript)

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

doStuff() for i in [0..someCount] by 1 Обратите внимание на на 1 в цикле for.

Теперь этот код по-прежнему создает дополнительную переменную _i. Если вы не можете с ним жить, используйте следующее:

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

Ответ 3

js2coffee.org Преобразует код для вас в обоих направлениях.

Ответ 4

Предыдущие ответы работают. Тем не менее, отбрасывание i генерирует это лучше для меня:

for [0...10]
  doStuff()

или же

doStuff() for [0...10]

Другие решения добавляют дополнительную переменную итератора i для использования внутри цикла, например, doStuff(i), но из http://coffeescript.org/v1/#loops:

Если вам не нужно текущее значение итерации, вы можете пропустить его:

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

Подробно, перевод for я in [0...10] предназначен for (i = j = 0; j < 10; я = ++j), тогда как перевод for [0...10] предназначен for (i = 0; я < 10; i++).

Обратите внимание на обсуждение в других комментариях о 2- [0..9] и 3- [0..9] ([0..9] против [0...10]).

Ответ 5

Вы можете обратиться http://js2.coffee для преобразования js в кофе