Javascript Reduzieren Sie ein leeres Array

104

Wenn ich das Array verkleinere, versuche ich, die Zahl Null zu erhalten, aber ich verstehe das Verhalten der Funktion nicht klar

[].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
});

Ergebnis

TypeError: Reduce of empty array with no initial value

Wenn das Array leer ist, kann ich es anscheinend nicht reduzieren

[""].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
});

Ergebnis

""

Wenn das einzige Element im Array eine leere Zeichenfolge ist, wird eine leere Zeichenfolge abgerufen

Agusgambina
quelle

Antworten:

226

Der zweite Parameter ist für den Anfangswert.

[].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
}, 0);

oder mit ES6:

[].reduce( (previousValue, currentValue) => previousValue + currentValue, 0);
xdazz
quelle
24

Beide Verhaltensweisen entsprechen der Spezifikation .

Sie können kein reduceleeres Array erstellen, es sei denn, Sie geben explizit einen anfänglichen "akkumulierten" Wert als zweites Argument an:

Wenn kein Anfangswert angegeben wurde, entspricht der vorherige Wert dem ersten Wert im Array und der aktuelle Wert dem zweiten Wert. Es ist ein TypeError, wenn das Array keine Elemente enthält und initialValue nicht angegeben wird.

Wenn das Array mindestens ein Element enthält, ist die Angabe eines Anfangswertes optional. Wenn jedoch keines angegeben ist, wird das erste Element des Arrays als Anfangswert verwendet und reduceverarbeitet den Rest der Array-Elemente weiter, indem Sie Ihren Rückruf aufrufen. In Ihrem Fall enthält das Array nur ein einzelnes Element, sodass dieses Element sowohl zum Anfangs- als auch zum Endwert wird, da über den Rückruf keine Elemente mehr verarbeitet werden müssen.

Jon
quelle