¿Puede decirme por qué eso no funciona y cómo hacer que funcione, con un método simple de 'reducción'?

let newArray = array.reduce((acc,value,index) => index%2 ? acc[0]+=value: acc[1]+=value ,[0,0]);
console.log(newArray);
Output: Nan

'matriz' es solo una matriz con números.

No cree respuestas con funciones largas y complejas. Quiero hacerlo lo más simple posible.

Sé que podemos hacer esto:

let sum = [0,0];

array.map((value,index)=> index%2? sum[0]+=value : sum[1]+=value);
console.log(sum);

Pero solo tengo curiosidad, por qué eso no funciona.

0
Wiktor Kujawa 8 may. 2021 a las 00:14

1 respuesta

La mejor respuesta

No está devolviendo el acumulador (acc) de la función. Está devolviendo el resultado de la expresión de asignación acc[0] += value que es solo un número. En la siguiente iteración, intenta indexar ese número. Puedes arreglar esto usando algo como:

let array = [1, 2, 3, 4, 5]
let newArray = array.reduce((acc,value,index) => 
    (index % 2 ? acc[0] += value: acc[1] += value, acc),[0,0])
console.log(newArray);
4
Mark 7 may. 2021 a las 21:23