Reducir en javascript con valor inicial

CorePress2024-01-24  11

Estoy intentando reducir una matriz a la suma de sus valores pares. He estado revisando el documento de MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

Esto dice que si se proporciona el valor inicial, entonces no se saltará el índice 0; de hecho, comenzará desde el índice 0. Mi problema es que la reducción comienza con el índice 1. Por lo tanto, mi resultado es incorrecto. Estoy seguro de que estoy leyendo el documento incorrectamente o entendiéndolo mal. Esta es la nota a la que me refiero: "Nota: Si no se proporciona el valor inicial, reduce() ejecutará la función de devolución de llamada comenzando en el índice 1, omitiendo el primer índice. Si se proporciona valor inicial, comenzará en el índice 0."

Aquí está mi código.

var array = [1,2,3,4,6,100];
var initialValue = 0;
var value = array.reduce(function(accumulator, currentValue, currentIndex, array, initialValue) {
    //console.log(accumulator);
    if( currentValue % 2 === 0) {
      accumulator += currentValue;
      //return accumulator;
    }
    return accumulator;
});
console.log(value);

Obviamente, lo soy.Obteniendo el resultado 113 y no 112. Supongo que es porque el acumulador ya tiene un valor 1. Por lo tanto, está sumando 1 inicialmente.



------------------------------------

Si vuelves a mirar el documento, notarás que callbackFn solo toma como máximo 4 variables y el valor inicial debe estar en el segundo parámetro

arr.reduce(callback( accumulator, currentValue, [, index[, array]] )[, initialValue])
                   ^                                               ^

Aquí está la versión pequeña corregida que devolvió 112 como se esperaba

var array = [1,2,3,4,6,100];
var initialValue = 0;
var value = array.reduce(function(accumulator, currentValue, currentIndex, array) {
    //console.log(accumulator);
    if( currentValue % 2 === 0) {
      accumulator += currentValue;
      //return accumulator;
    }
    return accumulator;
}, initialValue);
console.log(value);



------------------------------------

juevesEsta es la sintaxis proporcionada por MDN para usar un valor inicial:

 [0, 1, 2, 3, 4].reduce((accumulator, currentValue, currentIndex, array) => {
    return accumulator + currentValue}, 10)

El valor inicial en este ejemplo es 10, debe pasarse como segundo argumento a la función de reducción.

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare