Coffeescript:阵列理解中的“其他”

时间:2014-02-11 03:51:33

标签: if-statement coffeescript list-comprehension

coffeescript是否提供等效的"否则"在数组理解中,如python的列表推导?

Python示例

foo = ["yes" if i < 50 else "no" for i in range(100)]

因为,在python中,if / else实际上是一个三元语句,我认为coffeescript可能类似,所以我尝试了这个:

coffeescript尝试

foo = (if i < 50 then "yes" else "no" for i in [0..100])

不同的是,python恰当地给了我50个是和50个没有,但是coffeescript只给了我一个&#34;是&#34;。

所以,为了清楚起见,我想知道是否有办法使用&#34; else&#34;在coffeescript的阵列理解中。

2 个答案:

答案 0 :(得分:4)

您的原始查询转换为:

var _i, _results;
if (i < 50) {
  return "yes";
} else {
  _results = [];
  for (i = _i = 0; _i <= 100; i = ++_i) {
    _results.push("no");
  }
  return _results;
}

正如您所看到的,i < 50立即得到满足,因为它未定义,返回单个“是”。

您需要以这种方式重写它以获得所需的结果:

foo = ((if i < 50 then "yes" else "no") for i in [0..100])

这导致以下结果:

for (i = _i = 0; _i <= 100; i = ++_i) {
  _results.push(i < 50 ? "yes" : "no");
}

答案 1 :(得分:1)

新的线条和缩进也有效。在Coffeescript中,将循环变成理解是非常容易的。

x = for i in [0..100]
   if i<50 then 'yes' else 'no'