tengo un problema con reducir.
Quiero agregar el resto de las matrices de la primera matriz en la matriz. array = [[a,b],[c,d],[e,f]] el orden por venir es: (ab)+(cd)+(ef), pero mi código no funciona :((
mi código es:
const sumAndSubtract = (numberInNestedArray) => { return numberInNestedArray.reduce((acc, cur, ind, arr) => { const firstSubtract = arr[0][0] - arr[0][1]; const otherSubtract = acc[ind] - cur[ind]; console.log(firstSubtract); console.log(otherSubtract); return firstSubtract + otherSubtract; }) } console.log(sumAndSubtract([ [10, 0], [5, 7], [6, 9] ]))resultado esperado: 10 + (-2)+(-3)
Use reduce de la siguiente manera, donde a es la suma acumulada y b y c son los valores atómicos recuperados de cada par:
let result = [[10, 0], [5, 7], [6, 9]].reduce((a, [b, c]) => a+bc, 0); console.log(result);En su intento, lo siguiente no está bien:
La expresión arr[0][0] - arr[0][1] . Esto solo mira el primer par en la matriz y lo hace en cada iteración. En su lugar, deberías estar haciendo cur[0] - cur[1] .
La expresión acc[ind] - cur[ind] : ind es el índice en la matriz externa, que toma los valores 0, 1 y 2 para la entrada de ejemplo. acc[ind] es un par, no un número y cur[ind] en algún momento será una referencia fuera de rango, ya que cur solo tiene dos valores.
La llamada a reduce debe obtener el argumento de valor inicial, porque sin él, el primer par será el valor inicial de acc , que no desea: desea un número . Así que pase 0 como argumento de valor inicial para reduce .
Lo que llamas otherSubtract ya se proporciona como acc , por lo que en realidad no necesitas esta variable.
Podría mapear las restas y sumar los valores más tarde.
const add = (a, b) => a + b, subtract = (a, b) => a - b, sumAndSubtract = array => array .map(a => a.reduce(subtract)) .reduce(add); console.log(sumAndSubtract([[10, 0], [5, 7], [6, 9]]));La forma más corta de hacerlo será:
numberInNestedArray.reduce((acc, cur) => acc + (cur[0] - cur[1]), 0)