coffeescript中的简单循环

时间:2012-04-20 12:39:56

标签: coffeescript

我有这个代码:

count = $content.find('.post').length;              
for x in [1...count]
    /*
    prev_el_height += $("#content .post:nth-child(" + x + ")").height();
    */
    prev_el_height += $content.find(".post:nth-child(" + x + ")").height();

我希望这会变成

for (x = 1; x < count; x++) { prev_el ... }

但它变成了这个:

for (x = 1; 1 <= count ? x < count : x > count; 1 <= count ? x++ : x--) {

有人可以解释一下原因吗?

编辑:如何将预期的语法输出?

4 个答案:

答案 0 :(得分:22)

在CoffeeScript中,您需要使用by关键字来指定循环的步骤。在你的情况下:

for x in [1...count] by 1
  ...

答案 1 :(得分:3)

您要求从1循环到count,但您假设count总是大于或等于1;生成的代码没有做出这样的假设。

因此,如果count是&gt; = 1,则每次循环计数器都会递增:

for (x = 1; x < count; x++) { /* ... */ }

但如果count是&lt; 1然后每次循环计数器递减:

for (x = 1; x > count; x--) { /* ... */ }

答案 2 :(得分:2)

嗯,您希望x从1到count。代码检查count是大于还是小于1.

如果count大于1,则 x <{em>} <。{} / p>

如果count小于1,那么当更大 <{1}}时, count必须递减 x。< / p>

答案 3 :(得分:0)

供将来参考:

$('#content .post').each ->
    prev_el_height += $(this).height()

具有相同的效果,假设:nth-child等同于.eq(),并且x超过了数字,则元素是拼写错误。