En el presente tutorial vamos a ver como utilizar la función reduce de Javascript, pero no para obtener un valor, sino un arreglo que tenga almacenado algún atributo que nos interese de una colección de objetos.
Suena un poco trabalenguas, pero lo voy a poner como un ejemplo: si yo tengo una colección de películas, voy a obtener un arreglo que tenga únicamente los títulos de estas películas.
Sin más por decir, empecemos:
Tengo una colección de películas:
Let películas = [{titulo: La mujer Maravilla, año: 2017, director: Pepito Perez}, {titulo: Otra película nice, año: 2018, director: Juanito Ortiz}, {titulo: Una tercer película Cool, año: 2019, director: Benito Bunny }]
Para guardar en un arreglo solamente los nombres de las películas, voy a usar la función reduce, si aun no la conoces, es importante que primero veas la clase relacionada.
let funcionAuxiliar = (acum,pelicula) => { acum.push(película,titulo); return acum; }
Básicamente la función auxiliar introduce el título en un arreglo que se va acumulando y devuelve ese arreglo para que las películas posteriores introduzcan sus títulos.
Lo que yo busco es esto:
arreglo = [‘La Mujer Maravilla’] //Agrego la primera película arreglo = [‘La Mujer Maravilla’, ‘Otra película nice’] //Agrego la segunda película arreglo = [‘La Mujer Maravilla’, ‘Una tercer película Cool] //Agrego la tercer pelicula
let arregloDeseado = películas.reduce(funcionAuxiliar,[])
En este punto, el valor inicial es un arreglo vacío “ [ ] ”. Si todo sale bien, al enviar a consola la variable arregloDeseado obtendremos un arreglo con los valores
[‘La Mujer Maravilla’, ‘Otra película nice’, ‘Una tercer película Cool]
De esta manera, la función reduce no solamente se utiliza para obtener valores acumulados, sino en general, para extraer elementos de los arreglos.
Espero te haya gustado este corto tutorial, que en lo personal me ha sido muy útil y me ha ahorrado muchas líneas de código.
En ese caso optaría por el equivalente con map:
peliculas.map( item => item.titulo);
Pero reduce también es muy útil para obtener un objeto…
peliculas.reduce( (acc, {titulo, año}) => (acc[titulo] = año) && acc, {} );
/* resultado:
{
“La mujer Maravilla”: “2017”,
“Otra película nice”: “2018”,
“Una tercer película Cool”: “2019”
}
*/