Antwort an „Rolf B“ verfassen

problematische Seite

Hallo Robert B.,

da ich die Summe über eine Array-Komponente bilde, muss der Aufruf von Array.prototype.reduce entsprechend aussehen und auch den passenden Startwert als Array haben:

Nö. Ein Array als Summenelement durchzuschleifen ist kein muss. Es steht nirgends geschrieben, dass der Typ des Summenparameters zwingend vom gleichen Typ wie die Array-Einträge sein muss. Du hast den reduce-Eintrag im Wiki doch gelesen (weiß ich, weil Du daran etwas verbessert hast). Guck mal:

// Beispiel:
const vals = [['red', 1], ['green', 2], ['black', 5]];

// allgemeine Summe für leeres Array
// oder mit beliebiger Anzahl an Elementen:
const sum = vals.reduce((sum,value) => sum+value[1], 0);
//                                                 ▲▲▲

Gibt man reduce keinen dritten Parameter, dann bildet das erste Arrayelement ("red") den initialen sum-Wert, und die reduce-Schleife beginnt erst beim zweiten Array-Element damit, den Callback aufzurufen.

Wenn ich nur Zahlen im Array habe und der Callback für das erste Arrayelement nichts anderes tun würde, als dieses Element als neue Summe zurückzugeben, ist das unproblematisch.

Wenn man aber komplexere Dinge tut, ist der dritte Parameter hilfreich. Er tut zweierlei:

  • er legt einen expliziten Startwert für die Reduktion fest
  • die reduce-Schleife beginnt nicht beim zweiten, sondern beim ersten Array-Eintrag mit den Callback-Aufrufen

Ich habe das Beispiel aus diesem Thread mal ins Wiki übertragen.

Rolf

--
sumpsi - posui - obstruxi
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen