数组search/ for循环
我目前有一个实现,通过一个json文件(从mongoose返回)中的数组循环,并寻找具体项目如下
所以发生了什么事情是我传递一个id
在请求头来expression,我需要发生的是要抓住相关的story.users.id.name
从story.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
variables是未定义的。
所以我诉诸如下运行两个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"); } }