Ich habe eine Situation, die ich bisher keine befriedigende Lösung für gefunden habe. Unten ist der Code auf hoher Ebene.JavaScript Verzögerung, wenn in der inneren Schleife
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9],
o = {a:1, b:2, c:3, d:10, e:11, f:12, g:7, h:8, i:9};
function matched(i, j) {
return a[i]===o[j];
}
for (var i=0; i<a.length; ++i) {
for (var j in o) {
if (matched(i, j)) console.log(a[i]);
}
}
Ich habe ein Array und ein Objekt. Ich durchlaufe das Array und dann das Objekt, um über die Funktion matched()
eine Übereinstimmung zu finden, die einen booleschen Wert true
oder false
zurückgibt. Wenn die Bedingung true
ist, protokolliere ich das Array-Element. Wenn Sie jetzt den Code ausführen (https://jsfiddle.net/thdoan/0tubbokj/), sollten Sie die Nummern 1-3 und 7-9 auf der Konsole ausgeben sehen.
Ich versuche, die Zahlen mit einer Verzögerung von einer Sekunde zwischen jeder Zahl auszugeben. Ich weiß, wie man eine Verzögerung zwischen jeder Schleifeniteration einführt, aber ich möchte nur die Verzögerung für die Zahlen hinzufügen, die gedruckt werden (d. H. Wenn matched()
true
zurückgibt).
Erläuterung: Meine aktuelle Lösung, mit der ich nicht zufrieden bin, besteht darin, die übereinstimmenden Elemente in einem separaten Array zu speichern und mit einer Verzögerung über dieses Array zu iterieren, aber ich suche nach einer Lösung, die dies nicht tut erfordert das Erstellen eines neuen Arrays.
Sie benötigen Rekursion dafür. Ändern Sie die Schleife 'for()' mit einer rekursiven Funktion. Wenn Sie nicht können, können Sie 'setTimeout (function() {console.log (Ergebnis);}, 1000);' aber es ist nicht in Ordnung. –
@ MarcosPérezGude können Sie Ihre Lösung in einer Geige oder Codepen demonstrieren, weil ich es nicht zum Laufen bringen konnte. Vielen Dank. – 10basetom
Mein Vorschlag entspricht der Antwort von TJCrowder. –