在CoffeeScript中for循环中增加值+ 1?

时间:2014-04-14 12:47:30

标签: coffeescript

我试过了:

posts = Posts.find({},
  sort:
    position: 1
).fetch()

for post in posts
  i = 1
  Posts.update post._id,
    $set:
      position: i
  i++

但所有帖子最终都是第1位。我想要的是1,2,3,4等。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

您可以使用i强制do在合适的时间评估(而非引用)。来自fine manual

  

当使用JavaScript循环生成函数时,插入闭包装以确保循环变量被关闭是很常见的,并且所有生成的函数都不会共享最终值。 CoffeeScript提供do关键字,它立即调用传递的函数,转发任何参数。

这正是您所面临的情况。您还可以使用for e, i in ...形式for让CoffeeScript处理循环计数器:

for post, i in posts
  do (post, i) ->
    Posts.update post._id,
      $set:
        position: i + 1

答案 1 :(得分:1)

你也可以这样做:

posts.forEach (post, i) ->
    Posts.update post._id,
        $set:
            position: i + 1