1

我目前有一个实现,它遍历 json 文档中的数组(从 mongoose 返回)并查找特定项目,如下所示

所以发生的事情是我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变量未定义。

所以我诉诸于运行两个 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");
                }
            }

但是必须有更好的方法而不是循环两次数组?

4

1 回答 1

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");
    }
}
于 2013-08-25T13:17:08.707 回答