【问题标题】:Increase value + 1 within for loop in CoffeeScript?在 CoffeeScript 的 for 循环中增加值 + 1?
【发布时间】:2014-04-15 05:36:09
【问题描述】:

我试过这个:

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 等。

我做错了什么?

【问题讨论】:

  • 您的i = 1 在循环中...每次迭代都将其设置为 1。

标签: coffeescript


【解决方案1】:

您可以使用do 在正确的时间强制评估(而不是引用)i。来自fine manual

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

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

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

【讨论】:

    【解决方案2】:

    你也可以这样做:

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

    【讨论】:

      猜你喜欢
      • 2022-01-10
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 2018-02-24
      • 2011-06-02
      • 1970-01-01
      相关资源
      最近更新 更多