我目前有一个实现,它循环遍历json文档中的数组(从mongoose返回)并查找下面的特定项目
所以正在发生的事情是我在请求标头中传递id
来表达,我需要发生的是它从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
变量未定义。
所以我使用了两个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");
}
}
但是必须有更好的方法来实现上述而不是循环数组两次?
答案 0 :(得分: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");
}
}