繁体   English   中英

如何加快搜索循环?

[英]How can speed up search loop?

条件有一个循环如何优化以使搜索更快?

for (var i = 0; i < db.rows.length; i++) {
    for (var j = 0; j < user.rows.length; j++) {
        for (var k = 0; k < work.length; k++) {
            if (db.rows[i].LOGIN === user.rows[j].login && work[k].name === db.rows[i].NAME) {

            }
        }
    }
}

这通常是您希望在数据库上执行的操作。

话虽如此,您可以拆分条件,这样您就不需要为每一行执行第二个嵌套循环:

for (var i = 0; i < db.rows.length; i++) {
    for (var j = 0; j < user.rows.length; j++) {
        if (db.rows[i].LOGIN === user.rows[j].login) {
            for (var k = 0; k < work.length; k++) {
                if (work[k].name === db.rows[i].NAME) {

                }
            }
        }
    }
}

您可以使用两个Map作为用户登录名和工作名称。

var userLogins = new Map(user.rows.map(o => [o.login, o])),
    workNames = new Map(o => [o.name, o]),

for (var i = 0; i < db.rows.length; i++) {
    if (userLogins.has(db.rows[i].LOGIN) && workNames.has(work[k].name)) {
        // do something
    }
}

如果您只需要使用user.rowswork的对象进行简单检查,则可以使用Set代替。

var userLogins = new Set(user.rows.map(({ login } => login)),
    workNames = new Set(({ name }) => name),

for (var i = 0; i < db.rows.length; i++) {
    if (userLogins.has(db.rows[i].LOGIN) && workNames.has(work[k].name)) {
        // do something
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM