Ich habe es nur mal kurz überflogen, hoffe ich habe dabei nichts übersehen.
Was Sterni sagt stimmt schonmal, du solltest immer wenn du die Anazhl der Durchläufe kennst (eventuell auch nur grob wenn es für die Anwendung reicht) zur for-Schleife tendieren, auch wenn es hier nichts am eigentlichen Problem ändert. Zum einen ist die Schreibweise kompakter, zum anderen ist die Gefahr von Endlosschleifen deutlich geringer.
Dein eigentliches Problem hier liegt aber mehr im Geltungsbereich deiner Zählvariable. Die Zählvariable
i existiert nur im if-Block, nicht aber darüber hinaus. Mal abgesehen davon, wird aber die Funktion mit dem
return beendet, sprich die Inkrementierung deiner Zählvariable findet nie statt.
Mit dem
return endet auch die Lebensdauer deiner Zählvariablen, sprich beim nächsten Funktionsaufruf wird wieder eine neue Zählvariable
i angelegt und mit 0 initialisiert.
Aus diesem Grunde kann man aus dem obigen Beispiel auch die while-Schleife sowie die Zählvariable komplett entfernen und hätte denselben Effekt - aktuell läuft die Schleife nämlich jedes mal genau ein einziges mal durch und endet mit dem
return.
In C++ könnte man sowas mit statischen Variablen lösen, die einmal deklariert werden und dann über die ganze Laufzeit des Programms hinweg existieren. Ich fürchte aber, dass es sowas in JavaScript nicht gibt.
Also musst du dir irgendwie mit einer globalen Zählvariable behelfen.
Diese musst du dann gegebenenfalls immer wieder zurücksetzen, wobei du das stattdessen auch einfach mit dem Modulo Operator lösen kannst.
Ich hoffe das ist so klar, ansonsten nochmal nachfragen, dann erkläre ich es nochmal genauer.
Lg
Muddy