for循环中的多个条件

时间:2013-10-23 15:44:08

标签: javascript coffeescript

如何编写具有多个条件的for循环?

预期的Javascript:

for(k=1; k < 120 && myThing.someValue > 1234; k++){
  myThing.action();
}

js2coffee.org表示我应该使用while循环:

k = 1
while k < 120 and myThing.someValue > 1234
  myThing.action()
  k++

但最终会在javascript中编译回while循环。

有没有办法编写coffescript来编译到我想要的javascript并在for循环中包含额外的条件?

如果该问题的答案是错误的,那么使用coffeescript获得相同功能的最佳方式是什么?

到目前为止,我最好的while循环解决方案是

k = 1
myThing.action() while k++ < 120 and myThing.someValue > 1234

2 个答案:

答案 0 :(得分:4)

由于for循环等同于while循环加上几个语句,而CoffeeScript只提供一种for循环,因此请使用while循环。如果您尝试获取特定的 JavaScript输出,则可能不应该使用CoffeeScript。

当然,总是

`for(k=1; k < 120 && myThing.someValue > 1234; k++) {`
do myThing.action
`}`

避免的。

答案 1 :(得分:2)

尝试编写生成特定JavaScript的CoffeeScript有点愚蠢且没有意义,所以不要这样做。

相反,将代码的意图转换为CoffeeScript。你可以说:

for k in [1...120]
    break if(myThing.someValue <= 1234)
    myThing.action()

如果您实际上没有使用循环索引,请将其删除:

for [1...120]
    break if(myThing.someValue <= 1234)
    myThing.action()

这两个产生的JavaScript结构如下:

for(k = 1; k < 120; k++) {
    if(myThing.someValue <= 1234)
        break;
    myThing.action();
}

这应该与你的循环具有相同的效果。此外,我倾向于认为这三个循环比原始循环更易于维护,因为它们不会隐藏循环条件中的异常情况,它们将它放在你的脸上,这样你就不会错过它;当然,这只是我的意见。