Joh*_*ohn 28 loops for-loop decrement coffeescript
我知道如何在coffeescript中进行循环递增,例如:
CoffeeScript的:
for some in something
Run Code Online (Sandbox Code Playgroud)
生成的Javascript:
for (_i = 0, _len = something.length; _i < _len; _i++)
Run Code Online (Sandbox Code Playgroud)
如何在Coffeescript中创建类似于此的循环递减?
for (var i = something.length-1; i >= 0; i--)
Run Code Online (Sandbox Code Playgroud)
Tre*_*ham 51
编辑:by -1
支持CoffeeScript 1.5 语法.
首先,您应该熟悉by
关键字,它允许您指定步骤.其次,您必须了解CoffeeScript编译器对循环端点采用了一种非常天真的方法(参见问题1187,Blender链接到的),这意味着
for some in something by -1 # don't do this!!!
Run Code Online (Sandbox Code Playgroud)
将导致无限循环 - 它从索引0开始,将索引递增-1,然后等待直到索引命中something.length
.叹.
因此,您需要使用范围循环语法,这样您可以自己指定这些端点 - 但也意味着您必须自己获取循环项:
for i in [something.length - 1..0] by -1
some = something[i]
Run Code Online (Sandbox Code Playgroud)
显然这很混乱.所以你应该强烈考虑迭代something.reverse()
.请记住,reverse()
修改你调用它的数组!如果你想保留一个数组但是向后迭代它,你应该复制它:
for some in something.slice(0).reverse()
Run Code Online (Sandbox Code Playgroud)
Eva*_*ran 38
从咖啡脚本1.5.0开始,支持:
for item in list by -1
console.log item
Run Code Online (Sandbox Code Playgroud)
这将转化为
var item, _i;
for (_i = list.length - 1; _i >= 0; _i += -1) {
item = list[_i];
console.log(item);
}
Run Code Online (Sandbox Code Playgroud)