Fuente
Ambos map
y reduce
tienen como entrada la matriz y una función que defina. Son de alguna manera complementarios: map
no pueden devolver un solo elemento para una matriz de elementos múltiples, mientras reduce
que siempre devolverán el acumulador que finalmente cambió.
map
Utilizando map
itera los elementos, y para cada elemento devuelve un elemento que desea.
Por ejemplo, si tiene una matriz de números y desea obtener sus cuadrados, puede hacer esto:
const square = x => x * x
console.log([1, 2, 3, 4, 5].map(square))
reduce
Al usar una matriz como entrada, puede obtener un solo elemento (digamos un Objeto, un Número u otra matriz) basado en la función de devolución de llamada (el primer argumento) que obtiene los parámetros accumulator
y current_element
:
const numbers = [1, 2, 3, 4, 5]
console.log(numbers.reduce(function (acc, current) {
return acc + current
}, 0))
console.log(numbers.reduce(function (acc, current) {
return acc * current
}, 1))
¿Cuál debería elegir cuando puede hacer lo mismo con ambos? Intente imaginar cómo se ve el código. Para el ejemplo proporcionado, puede calcular la matriz de cuadrados como mencionó, usando reduce
:
[1, 2, 3, 4, 5].reduce(function (acc, current) {
acc.push(current*current);
return acc;
}, [])
[1, 2, 3, 4, 5].map(x => x * x)
Ahora, mirando estos, obviamente la segunda implementación se ve mejor y es más corta. Por lo general, elegiría la solución más limpia, que en este caso es map
. Por supuesto, puede hacerlo con reduce
, pero en pocas palabras, piense cuál sería más corto y eventualmente sería mejor.