【问题标题】:simple loop in coffeescript咖啡脚本中的简单循环
【发布时间】:2012-04-23 19:57:24
【问题描述】:

我有这个代码:

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--) {

谁能解释一下原因?

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

【问题讨论】:

    标签: coffeescript


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      所以如果count >= 1,那么循环计数器每次都会递增:

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

      但如果count

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

      【讨论】:

        【解决方案3】:

        好吧,您希望 x 从 1 变为 count。该代码正在检查count 是大于还是小于1。

        如果count 大于 1,则它必须增加 x 同时小于 count

        如果count 小于 1,则它必须递减 x 而它大于 大于count

        【讨论】:

        • 您的问题最初是WHY?
        • 是的,我意识到这一点,但我虽然人们也会提供解决方案,但谢谢 :) 我现在给了你 +1 :)
        【解决方案4】:

        供将来参考:

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

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

        【讨论】:

        • 这不是我正在做的,我将每个 div.post 的高度添加到变量 prev_el_height 中,该变量对于每个 div.post 都是唯一的......我知道搜索每个 div 并不是最佳的每一圈,我现在都在寻找解决方案..
        • 我现在创建了一个 $content 变量,然后改为:prev_el_height += $content.find(".post:nth-child(" + x + ")").height();
        • @OZZIE 啊,您发布的代码中看不到该变量。这是一个很好的改进,您还可以保存.post 集合然后过滤它。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-14
        • 1970-01-01
        • 2012-06-18
        • 1970-01-01
        • 2011-12-16
        • 1970-01-01
        相关资源
        最近更新 更多