[英]Simple CoffeeScript for loop from End to 0
我正在使用CoffeeScript,并且需要从头到尾遍历一个数组以删除元素。 这似乎是一项琐碎的任务。 这是我的原始代码,如果列表长度大于0,则工作正常,但是当列表长度为0时,循环从-1到0包括在内。
list = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
length = list.length
for i in [length-1..0]
if list[i] >= 3 and list[i] <= 5
list.removeAt(i)
我隔离了长度为0的数组的问题:
length = 0
for i in [length-1..0]
console.log '::', i
> :: -1
> :: 0
在常规JavaScript中 ,不会有问题:
length = 0
for (i = length - 1; i >= 0; i--){
console.log('::', i)
}
// no output
我找不到在CoffeeScript中编写for循环的任何方法,其行为类似于上面的JavaScript循环。
我发现了一个使用while循环的替代解决方案,但它并不漂亮。 我想避免将for循环包装在if
。 有什么办法可以像上面的简单JavaScript循环那样执行CoffeeScript循环?
假设您的最终目标是以相反的顺序遍历列表(这似乎是基于原始代码的情况),则可以在CoffeeScript中实现此目标,例如
list = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
for i in list by -1
console.log i;
编译成
var i, j, list;
list = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
for (j = list.length - 1; j >= 0; j += -1) {
i = list[j];
console.log(i);
}
您可以试用它来检查它是否也适用于空列表。
如果还需要循环主体中的索引,请使用
for e, i in list by -1
console.log e // array element
console.log i // array index
您说您需要从头到尾循环,这样您在js中的循环实际上就是
for (i = length - 1; i >= 0; i--){
console.log('::', i)
}
在CoffeeScript中,可以如下实现:
i = length - 1
while i >= 0
console.log '::', i
i--
更多CoffeeScript
解决方案:
list = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
new_list = (i for i in list when i < 2 or i > 5)
或仅打印:
console.log i for i in list when i < 2 or i > 5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.