Javascript Reducir una matriz vacía

104

Cuando reduzco la matriz, estoy tratando de obtener el número cero, pero no entiendo claramente el comportamiento de la función

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

resultado

TypeError: Reduce of empty array with no initial value

parece que si la matriz está vacía no puedo reducirla

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

resultado

""

Si el único elemento de la matriz es una cadena vacía, recupera una cadena vacía

agusgambina
fuente

Respuestas:

227

El segundo parámetro es para el valor inicial.

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

o usando ES6:

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

Ambos comportamientos están de acuerdo con la especificación .

No puede reduceuna matriz vacía a menos que proporcione explícitamente un valor inicial "acumulado" como segundo argumento:

Si no se proporcionó initialValue, previousValue será igual al primer valor de la matriz y currentValue será igual al segundo. Es un TypeError si la matriz no contiene elementos y no se proporciona initialValue.

Si la matriz tiene al menos un elemento, proporcionar un valor inicial es opcional. Sin embargo, si no se proporciona uno, el primer elemento de la matriz se utiliza como valor inicial y reducecontinúa procesando el resto de los elementos de la matriz invocando su devolución de llamada. En su caso, la matriz solo contiene un solo elemento, por lo que ese elemento se convierte en el valor inicial y también en el valor final, ya que no hay más elementos para procesar a través de la devolución de llamada.

Jon
fuente