10

如何编写具有多个条件的 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 循环本身中包含额外的条件?

如果该问题的答案是错误的,那么使用咖啡脚本获得相同功能的最佳方法是什么?

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

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

2 回答 2

4

因为for循环相当于一个while循环加上几个语句,而 CoffeeScript 只提供一种for循环,所以使用while循环。如果您尝试获取特定的JavaScript 输出,您可能不应该使用 CoffeeScript。

当然,总

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

避免。

于 2013-10-23T15:46:47.547 回答
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();
}

这应该与您的循环具有相同的效果。此外,我倾向于认为这三个循环比您的原始循环更易于维护,因为它们不会将异常条件隐藏在循环条件中,而是将其放在您的面前,因此您不会错过它;当然,这只是我的看法。

于 2013-10-23T17:18:15.193 回答