【问题标题】:array search / for loop数组搜索/for循环
【发布时间】:2013-08-28 01:37:33
【问题描述】:

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

所以发生的事情是我在请求标头中传递了一个 id 来表达,我需要做的是让它从 story.users 数组中获取关联的 story.users.id.name 并返回,然后一旦它有名称 send 对数组中的所有其他项目执行某些操作。

我确实尝试过如下操作:

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

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

【问题讨论】:

    标签: javascript arrays node.js mongoose


    【解决方案1】:

    您所做的似乎是正确的解决方案(您似乎拥有的目标)。没有真正简单的方法只做一个循环。

    不过,您可以让它更快、更干净:

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

    【讨论】:

    • 谢谢,我已经更新了我的代码以采用这种更简洁的方式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    相关资源
    最近更新 更多