繁体   English   中英

简单的CoffeeScript for循环从结束到0

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM