这似乎是一个简单的转换,但我似乎无法找到它的语法。
i = start
while(if step > 0 then i < end else i > end)
array.push i
i += step
start,end和step是有符号整数
答案 0 :(得分:2)
这可以做你想要的,假设你想要start
到end
的数字作为array
变量中的项目:
array = (i for i in [start...end])
答案 1 :(得分:1)
您应该阅读CofeeScript page on loops。但是在CoffeeScript中执行此操作的方法是使用list comprehension迭代范围:
(array.push i for i in [start...end] by step)
但请注意,列表推导会返回一个值。例如,给定此代码:
start = 10
end = 5
step = -2
array = []
(array.push i for i in [start...end] by step)
变量array
如预期的那样以值[10,8,6]
结束,但由于push
返回刚刚推入的数组的新长度,返回值< / em>的最后一个语句 - 如果它是函数中的最后一个,将被返回,或者如果你在REPL中输入上面的内容,则会打印出来 - 等等,是[1, 2, 3]
。
编辑因此,如下所述,首先构建具有列表推导的数组会更好:
array = (i for i in [start...end] by step)
构建范围时,请注意...
根据正确的端点产生排他范围,而..
产生包含范围。因此[1..5]
在列表中包含5个,而[1...5]
在4处停止。
另外,如果你真的发现自己需要C风格的for
循环的灵活性,你总是可以通过将它包装在反引号(`...`)中来在CoffeeScript中嵌入一些文字JavaScript:
`for (i=start; (step > 0 && i < end) || (step < 0 && i > end); i+=step) {
array.push(i);
}`