Rolf B: Methode die ein Array/Objekt durchläuft - kann man auf jeden Loop zugreifen?

Beitrag lesen

problematische Seite

Hallo ebody,

Am Rande gefragt: warum ist loopObjArrData Methode einer Klasse? Sie verwendet keine Daten aus dem this-Objekt. Es wäre - je nach Aufgabe der Klasse - zu erwarten, dass entweder das durchlaufene Array oder das Filter-Array unter this zu finden ist.

Wenn Du eine Methode oder Funktion hast, die irgendeine Form von Collection durchläuft, und Du ihr etwas mitgeben möchtest, das pro Durchlauf aktiviert wird, benötigst Du einen eigenen Callback, den Du dann selbst aufrufst. Das geht mit einer for..of Schleife so:

function loopy(collection, callback)
{
   for (let entry of collection)
   {
      callback(entry);
   }
}

let coll = [ "x", "y", "z" ];
loopy(coll, c => console.log(c));
            ===================   Callback als Pfeilfunktion

Du kannst eigene Callbacks auch aus einem anderen Callback heraus aufrufen. Funktionen sind Funktionen...

function gloopy(collection, callback)
{
   collection.forEach(entry => callback(entry));
}

let coll = [ "x", "y", "z" ];
gloopy(coll, c => console.log(c));
            ===================   Callback als Pfeilfunktion

Und natürlich spricht auch nichts dagegen, wenn ein Callback einen Wert zurückgibt.

function summeWenn(collection, filterCallback) {
   let summe = 0;
   for (let entry of collection) {
      if (filterCallback(entry))
         summe += entry;
   }
}

let werte = [ 1, 5, 9, 22, 12 ];
let kleinSum = summeWenn(werte, w => w < 10);
console.log(kleinSum);    // 15, Summe aller Werte unter 10

Eine Pfeilfunktion wie w => w < 10, die hinter dem Pfeil nur einen einzelnen JavaScript-Ausdruck hat und keine geschweiften Klammern, gibt den Wert dieses Ausdrucks zurück. Für diesen Fall also true, wenn w < 10 ist und sonst false.

Hat Dir das weitergeholfen?

Rolf

--
sumpsi - posui - obstruxi