Acabo de encontrar un error molesto (en mi código) que fue causado por el método JavaScript Array.reduce .
He creado una reproducción mínima del problema a continuación.
const people = [{name: 'bob'}, {name: 'fred'}, {name: 'john'}] people.reduce((acc, person, i) => { if (i === 0) throw Error('this error is never thrown') if (i === 1) console.log(acc === people[0]) console.log(i, person.name) return acc }) people.reduce((acc, person, i) => { if (i === 0) console.log(acc === null) console.log(i, person.name) return acc }, null)¿Por qué la primera pieza de código anterior itera dos veces solo mientras que el segundo uso de reduce itera tres veces (una para cada elemento de la matriz) como se esperaba?
¿Hay algún documento que documente este comportamiento o se trata de un error en Chrome? Si no es un error, ¿por qué existe este comportamiento? AIT
reduce() tiene el segundo parámetro (opcional) como valor inicial de la agregación. De los documentos:
Si no se especifica initialValue, anteriorValue se inicializa en el primer valor de la matriz y currentValue se inicializa en el segundo valor de la matriz.
En su código, se omite bob y también su índice. Así que este es el comportamiento correcto.