数组搜索/循环

时间:2013-08-25 13:06:37

标签: javascript arrays node.js mongoose

我目前有一个实现,它循环遍历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");
                }
            }

但是必须有更好的方法来实现上述而不是循环数组两次?

1 个答案:

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