数组search/ for循环

我目前有一个实现,通过一个json文件(从mongoose返回)中的数组循环,并寻找具体项目如下

所以发生了什么事情是我传递一个id在请求头来expression,我需要发生的是要抓住相关的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参数,所以namevariables是未定义的。

所以我诉诸如下运行两个if循环之后:

  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"); } } 

但是一定有更好的办法,而不是循环两次数组?

你做什么看起来像正确的解决scheme(与你似乎有目标)。 没有真正简单的方法只做一个循环。

但是,你可以使它更快,更清洁:

 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"); } }