इस शर्त के साथ एक चक्र है कि इसे कैसे अनुकूलित किया जा सकता है ताकि खोज तेज हो?

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) {

            }
        }
    }
}
0
user12094588 20 सितंबर 2019, 12:12

2 जवाब

सबसे बढ़िया उत्तर

यह आम तौर पर ऐसा कुछ है जिसे आप डेटाबेस पर निष्पादित देखने की अपेक्षा करेंगे।

कहा जा रहा है, आप शर्त को विभाजित कर सकते हैं, ताकि आपको प्रत्येक पंक्ति के लिए दूसरा नेस्टेड लूप करने की आवश्यकता न हो:

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) {

                }
            }
        }
    }
}
2
Robby Cornelissen 20 सितंबर 2019, 12:16

आप दो 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.rows या work की वस्तुओं का उपयोग करके बस एक साधारण जांच की आवश्यकता है, तो आप एक 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
    }
}
1
Nina Scholz 20 सितंबर 2019, 12:30