Javascript Reduce una matriz vacía


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 el array está vacío no puedo reducirlo

[""].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

Author: Trevor Hickey, 2014-04-29

2 answers

El segundo parámetro es para el valor inicial.

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

O utilizando ES6:

[].reduce( (previousValue, currentValue) => previousValue + currentValue, 0);
 139
Author: xdazz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-09 20:22:20

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

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

Si no se proporcionó valor inicial, entonces el valor anterior será igual a el primer valor en la matriz y currentValue será igual a la segundo. Es un TypeError si el array no contiene elementos y initialValue no se proporciona.

Si el array tiene al menos un elemento a continuación, proporcionar un valor inicial es opcional. Sin embargo, si no se proporciona uno, entonces el primer elemento de la matriz se usa como valor inicial y reduce continúa procesando el resto de los elementos de la matriz invocando su devolución de llamada. En su caso el array solo contiene un único 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 a procesar a través de la devolución de llamada.

 17
Author: Jon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-29 08:22:51