2013-08-25 210 views
1

我目前得到它通過一個JSON文件中的數組一個循環執行(從貓鼬返回)並尋找具體項目如下陣列搜索/ for循環

所以發生了什麼事是我傳遞一個id在請求頭中表示,我需要發生的是爲它抓取關聯story.users.id.namestory.users數組返回,然後一旦它有名稱發送做與數組中的所有其他項的東西。

我沒有嘗試這樣做象下面這樣:

  for (var i = 0; i < story.users.length; i++) { 
       if (story.users[i].id._id == req.headers.id) { 
        var name = story.users[i].id.name 
       } else { 
        push.apns(story.users[i].id._id, name + " started a new story"); 
       } 
      } 

哪裏會通過搶名稱循環,然後首先做陣列中的所有其他用戶的東西,但有時else參數大火使name變量未定義。

所以我使出運行兩個後,如果對方喜歡下面的循環:

  for (var i = 0; i < story.users.length; i++) { 
       if (story.users[i].id._id == req.headers.id) { 
        var name = story.users[i].id.name 
       } 
      }; 
      for (var i = 0; i < story.users.length; i++) { 
       if (story.users[i].id._id == req.headers.id) { 
       } else { 
        push.apns(story.users[i].id._id, name + " started a new story"); 
       } 
      } 

但是,必須有一個更好的方式來上面,而不是通過一個數組循環兩次?

回答

2

你做什麼看起來像正確的解決方案(與你似乎有目標)。沒有真正簡單的方法來做只有一個循環。

你可以使其更快,更清潔,但:

var name; // this is just cleaner than to define it in the loop 
for (var i = 0; i < story.users.length; i++) { 
    if (story.users[i].id._id == req.headers.id) { 
     name = story.users[i].id.name; 
     break; // don't loop over the other elements 
    } 
}; 
for (var i = 0; i < story.users.length; i++) { 
    if (story.users[i].id._id !== req.headers.id) { 
     push.apns(story.users[i].id._id, name + " started a new story"); 
    } 
} 
+0

謝謝,我已經更新了我的代碼去用做它的這種更清潔的方式 – Tam2