2014-04-14 62 views
0

我嘗試這樣做:在CoffeeScript中for循環中增加值+ 1?

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

我做錯了嗎?

+0

你'I = 1'是內環路......它的設置它在每次迭代中爲1。 – dule

回答

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 
1

你也可以這樣做:

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