Javascript: Inkrementieren Zähler-variable in Schleife
Ich bin mit Selenium und nodejs zum Durchlaufen einer html-Tabelle und Spiel ein string aus einem array den string in der Zelle.
Mein array sein könnte ["Name" "Adresse1", "Adresse2", "Address3",...] und den Wert in tr[1] wird versucht, eine übereinstimmung mit Arr[0], tr[2] mit Arr[1] usw..
Die html-Tabelle wird eine Zeile für jedes Element im array, aber wenn es keine Daten für, sagen wir, 'Adresse2' dann wird das nicht angezeigt.
In diesem Fall tr[3] finden, dass Sie nicht mithalten können mit Arr[3]. Anstatt sich zu tr[4], möchte ich sehen, wenn tr[3] entspricht mit Arr[4], dann Arr[5] usw. Die Elemente in der Tabelle wird immer in der gleichen Reihenfolge wie die Elemente in dem array, so dass ich keine Notwendigkeit für alle array-Elemente "unmatched".
Ich gepostet habe die ganze Funktion, falls es relevant ist, aber das Problem scheint sehr einfach zu sein, dass ich nicht bekommen kann "i = i - 1" tragen Sie den neuen Wert in die nächste Schleife iteration.
Habe ich bewiesen, dass ich in der Else-Abschnitt, und der Wert von i - 1 ist als würde ich erwarten, dass an diesem Punkt.
var retrieveData = function retrieveData(Arr){
j = 0
driver.findElements(webdriver.By.xpath("//*[@class='table-container']")).then (function(rows){
rowCount = rows.length;
console.log("Row count = " + rowCount);
}).then (function(fn){
for (i = 1;i < rowCount + 1; i++){
(function(i){
var element = driver.findElement(webdriver.By.xpath("//div[@class='table-container']["+i+"]/div/strong/a"));
element.getText().then(function(Type){
var typefromArray = String(Arr[j].split(':')[0]);
if (Type == typefromArray){
//Do something
j = j + 1;
} else {
//Do something
i = i - 1 //My problem looks to be here, but may be in the transfer of this back up to the beginning of the loop
j = j + 1;
}
});
})(i);
};
});
};
module.exports.retrieveData = retrieveData;
- Sie haben die
i = i - 1
im inneren des IIFE. Sie könnte auchi--
undj++
. - Hi, danke für die schnelle Antwort! Ich möchte nur das verringern der Zähler, wenn der string nicht übereinstimmen (d.h. die If-Anweisung False zurückgibt). Wie kann ich die i = i - 1(oder i--), die außerhalb des Sonst?
- Sie spiegeln den Umfang der
i
im(function(i){
Erklärung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie eine IIFE in Ihrem
for
-Schleife, die Sie übergeben Sie den index.Das sieht aus wie es entworfen wurde, um zu verhindern, dass änderungen
i
!Wenn Sie
am Ende Ihrer Funktion, es hat absolut keine Wirkung, wie es wirkt sich nur auf die
i
innen Ihre Funktion.Hier ist ein guter Artikel über " variable scopes in JavaScript.
Aber wenn Sie immer noch wollen, um zu ändern
i
dann eine option wäre, einfach haben es zurückgegeben werden durch die anonyme Funktion zugeordnet und externeni
variable:Das ist die Lösung, um die von Ihnen gestellte Frage.
Aber ich bin mir ziemlich sicher, dass es andere Probleme in Ihrem code, wie Sie mit Hilfe eines synchron-Schleife, noch die Aktualisierung der Zähler in einer asynchron aufgerufenen Funktion (die Funktion übergeben
element.getText().then
).Ich würde vorschlagen, Sie entweder studieren ein bisschen darüber, wie man asynchronen code in JavaScript (Sie sind mit Verspricht jetzt), oder öffnen Sie eine mehr Allgemeine Frage zu dem größeren problem, das Sie versuchen zu lösen, da es etwas mehr design, Hürden zu überwinden.
Hier ist ein Beispiel für die Art von Muster, die Sie möglicherweise verwenden, um mehrere Versprechen (nicht gemeint zu sein, kopieren-einfügen, verwendet ES2015 für die Kürze):