Rolf B: Frage zu Kreisdiagrammen im Wiki-Artikel „Balken-_und_Kreisdiagramme“

Beitrag lesen

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