JavaScript Schleife x mal durchlaufen lassen und danach wieder in die Schleife

hemorieder

Lieutenant
Registriert
März 2003
Beiträge
649
Hey,

folgendes Problem:

Ich habe ein Array welches mit X Elementen gefüllt ist.
Aufgrund einer Limitierung kann ich immer nur maximal 15 Einträge des Array abarbeiten lassen.
Nun bin ich irgendwie verwirrt, wie ich einerseits in einer Schleife nur 15 durchgänge habe und anderseits weiter im Array durchgehe.
Dazu muss ich auch noch bei jedem neuen 15ner Durchgang wissen, wie viele Einträge nun im Array noch übrig sind.
Weil die Funktion welche ich aufrufe jedes mal wissen muss, wie viele Einträge nun übermittelt werden.

Javascript:
if(meinArray.length > 15){
    
    for(i=0;i<15;i++)
        {
            tuEtwas(meinArray[ELEMENTE 0 bis max 15], wieVieleElementeWerdenÜbergeben)
        }
    
}
else{
    tuEtwas(meinArray, meinArray.length)
}

Ist irgendwie verständlich was mein Problem ist?

lg
 
Einfach statt i++ jedes Mal 15 Elemente weiter gehen in der Schleife. Und dann von diesem Startpunkt aus entweder die nächsten 15 Elemente nehmen und an die Funktion übergeben, oder halt alle restlichen Elemente nehmen wenn es keine vollen 15 mehr gibt.
 
Kannst dein Index auch außerhalb der For Schleife anlegen. Dann kannst du in beiden schleifen darauf zugreifen.
 
Schau dir mal das Thema Pagination/NextToken an. Das benutzt man z.B. wenn eine API nur eine Liste/Array mit maximal 50 Elementen zurück gibt, es aber mehrere Hundert Elemente insgesamt gibt. Dann fragt man die ersten 50 ab und kriegt in der Antwort auch mit welches das 51te Element wäre und fragt in der nächsten Abfrage dann mit dem NextToken des 51ten Elements ab.
 
Zähl mit einer Variable mit wo du in deinem Array bist und mach dir eine Schleife drumherum die als Abbruchbedingung Variable > Array.length hat.
In der for-Schleife kannst du die Variable dann immer mit hochzählen oder du addierst einmal 15 nach der Schleife.

Gibt sicherlich noch andere Lösungen ;)
 
  • Gefällt mir
Reaktionen: DerTiger
Hm irgendwie habe ich eine Blockade. Müsste ich nicht vorher wissen wie viele Durchgänge ich habe? Also die Arraygröße durch 15 teilen und dann aufrunden lassen und so oft durch die Schleife?
 
Du könntest auch mit array.slice() dein Array in 15er Chunks "vorbereiten" (PHP hat dafür array_chunk von Haus aus).
In einer Schleife mit array.slice() die ersten 15 Elemente vom Array entfernen und in ein neues temporäres Array schieben sodass du dann nur noch durch das temp Array loopen musst.

Nach dem Motto: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] mit slice(0, 5)-Magie in [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12]] verwandeln.
Dann kannst du in einer Schleife einfach durchloopen und deine Funktion aufrufen.
 
Du kannst auch ganz ohne Zählvariable auskommen, das hab ich mal eben in nem Live-Editor (MDN) getestet:
Javascript:
const zahlen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

while(zahlen.length > 0) {
  var splicedArray = zahlen.splice(0, 3);
  console.log(splicedArray, splicedArray.length)
}
Musst du nur auf deine 15 Elemente anpassen, und statt dem log halt deinen Funktionsaufruf, damit sparst du dir sowohl die Laufvariable als auch das if-else.

Ergänzung:
Falls du dein Array nicht überschreiben willst weil du es hinterher noch brauchst solltest du es nochmal auf ne andere variable schreiben.
 
ich hab nun mal das gemacht

Javascript:
if (array.length > 15)
            {
                var x = 0;
                var tmpArray = new Array;

                while (x<=array.length)
                {
                    for (y = 0; y <= 15 || x == array.length; y++)
                    {
                        tmpArray[y] = array[x];
                        x++;
                    }
                    tuEtwas(tmpArray, tmpArray.length);

                }

            }
            else
            { // weniger als 15 elemente
                tuEtwas(array, array.length);
            }

habe ich da einen Denkfehler drin?
 
ja ... das wird wohl nicht funkionieren, oder? Merkst du das nicht selbst, hast du es ausprobiert?

Warum willst du nicht einfach Math.ceil(array.length/15) mal das Array bearbeiten und erhöhst jedes mal dann den start Index, gehst dann max. 15 resp. bis zum Array Ende weiter?

Mal abgesehen davon, sowas wie StackOverflow kennst du? Dein Problem ist ja etwas das sicherlich schon unzählige Menschen hatten.
https://stackoverflow.com/questions/8495687/split-array-into-chunks
Das sollte dir eigentlich doch helfen, oder nicht?
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: pcBauer
Zurück
Oben