Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Coffeescript for循环中的多个条件_Coffeescript - Fatal编程技术网

Coffeescript for循环中的多个条件

Coffeescript for循环中的多个条件,coffeescript,Coffeescript,我有一个关于coffeescript for loop的问题 单条件情况通过以下方式实现: -> foo for foo in foos when foo is bar 它产生: (function() { var foo, _i, _len, _results; _results = []; for (_i = 0, _len = foos.length; _i < _len; _i++) { foo = foos[_i]; if (foo === b

我有一个关于coffeescript for loop的问题

单条件情况通过以下方式实现:

-> foo for foo in foos when foo is bar
它产生:

(function() {
  var foo, _i, _len, _results;
  _results = [];
  for (_i = 0, _len = foos.length; _i < _len; _i++) {
    foo = foos[_i];
    if (foo === bar) _results.push(foo);
  }
  return _results;
});
并将其编译为:

(function() {
  var foo, _i, _len, _results;
  _results = [];
  for (_i = 0, _len = foos.length; _i < _len; _i++) {
    foo = foos[_i];
    if (foo === bar) {
      _results.push(foo);
    } else if (foo !== bar) {
      _results.push(bar);
    } else {
      _results.push(void 0);
    }
  }
  return _results;
});
它可以防止推送到
\u结果
,并且可以正常工作


那么,coffeescript中是否有类似于第一个示例但适用于多种条件的构造?

我想知道您是否可以这样使用它:

-> select foo for foo in foos when foo matches bar
它需要一个函数来处理
选择
匹配
,但它会提供您要查找的语法:

(function() {
  var foo, _i, _len, _results;
  _results = [];
  for (_i = 0, _len = foos.length; _i < _len; _i++) {
    foo = foos[_i];
    if (foo(matches(bar))) _results.push(select(foo));
  }
  return _results;
});
(函数(){
变量foo,_i,_len,_results;
_结果=[];
对于(_i=0,_len=foos.length;_i<_len;_i++){
foo=foos[_i];
if(foo(匹配(条))_results.push(选择(foo));
}
返回结果;
});

如果……否则,
解决方案在我看来非常好。请记住,
when
用于实际跳过值。比如说,

num for num in [1, 2, 3, 4] when num % 2 is 0
我会给你

[2, 4]

相比之下,如果希望循环返回与输入长度相同的列表,则应在
if…else
开关中使用条件,因为我只会使用以下代码段:

foo for foo in foos when foo is bar or foo isnt bar

但它们可能过于简单化了

我后来采用了if…else解决方案和手动重构javascript,因为在coffeescript中似乎没有满足我所寻找的构造(一种不将值返回到变量的方法,这在循环中的循环中是一个问题)。
[2, 4]
foo for foo in foos when foo is bar or foo isnt bar