Existen métodos de arrays para recorrerlos, y devolver un valor o un array con nuevos resultados. Entre estos están dos muy importantes: map y filter.
Utilizaremos el siguiente array de objetos para los ejemplos de los métodos:
var articulos =[{nombre:"Bici",costo:3000},{nombre:"TV",costo:2500},{nombre:"Libro",costo:320},{nombre:"Celular",costo:10000},{nombre:"Laptop",costo:20000},{nombre:"Teclado",costo:500},{nombre:"Audifonos",costo:1700},]
Cómo utilizar el método filter
El método filter consiste en crear un nuevo array a partir de los elementos originales filtrados mediante una función (callback) que indica la condición a cumplir y es inmutable. Si la condición se cumple, retorna el elemento completo.
El método filter recibe dos argumentos:
La función que itera y evalúa si cada elemento del array si cumple con la condición especificada (obligatorio).
Un objeto al que puede hacer referencia el contexto this en la función. Si se lo omite, será undefined. Recuerde que this es diferente según el lugar donde sea invocado.
var otherArray = array.filter(function(), thisArg)
La función, que recibe como argumento el método filter, utiliza tres parámetros:
El valor actual del elemento iterado. Es decir, si es la primera iteración, será el primer elemento, y así sucesivamente.
El índice del elemento iterado. Es decir, si es la primera iteración, será el índice 0, y así sucesivamente.
El array que está iterando.
const other = array.filter(function(element, index, array))
Practiquemos el uso del método filter
Utilicemos el arrayarticulos que definimos para filtrar en un nuevo array los artículos cuyo costo sea menor o igual que 500.
Entonces utilizamos el método filter que retorne la condición que necesitamos. Recuerda que el primer parámetro de la función callback es cada uno de los elementos del array.
El método mapes inmutable y consiste en crear un nuevo array a partir de los elementos originales transformados mediante una función (callback).
El método map recibe dos argumentos:
La función que itera y transforma cada elemento del array (obligatorio).
Un objeto al que puede hacer referencia el contexto this en la función. Si se lo omite, será undefined. Recuerde que this es diferente según el lugar donde sea invocado.
var otherArray = array.map(function(), thisArg)
La función, que recibe como argumento el método map, utiliza tres parámetros opcionales:
El valor actual del elemento iterado. Es decir, si es la primera iteración, será el primer elemento, y así sucesivamente.
El índice del elemento iterado. Es decir, si es la primera iteración, será el índice 0, y así sucesivamente.
El array que está iterando.
var otherArray = array.map(function(element, index, array))
Practiquemos el uso del método map
Utilicemos el arrayarticulos que definimos para crear un nuevo array con el nombre de cada uno de los artículos.
Entonces utilizamos el método map que retorne el nombre de cada artículo. Recuerda que el primer parámetro de la función callback es cada uno de los elementos del array.
Estoy de acuerdo con fransantopietro, creo que deberías ponerlo en la primera clase.
Muchisimas gracias por el aporte!!!
jajaja, muy bueno!!!
jajajajajjajaa, buenisimo!!
Interpretando el ejemplo como una tabla, las diferencias de map y filter son return de columnas vs de filas:
Excelente interpretación, además para el caso que nos ocupa, esas filas son en realidad {objetos} y cada columna representa las propiedades de dicho objeto.
Me voy a robar esta imagen
.filter : nos permite filtrar solo los elementos que deseamos (según ciertos criterios) y devolverlos en un nuevo array.
.map : crea un nuevo array con los resultados de la llamada a la función indicada aplicados a cada uno de sus elementos.
Thanks
Muchas gracias por el aporte!
Por si desean entender un poco el uso de esto que estamos aprendiendo que parece ser un poco confuso, les dejo mis apuntes contando una historia, siento que es más fácil entender las cosas así.
// Este ejemplo es imaginando que recibimos una lista de 30 carros diferentes y se nos solicita que se almacene esta información, como estamos aprendiendo a usar js por que es un lenguaje cool y no queremos tipiar todo de manera normal y aburrida, usaremos este lenguaje c: así hacemos un pequeño trabajo de separar todas las marcas, modelos y años respectivamente en distintos arrays para así lograr juntarlos en uno solo usando una función constructiva la cual indicara cada auto ingresado con su marca, modelo y año respectivamente.var marca =["Audi","Subaru","Lexus","Porsche","BMW","Mazda","Buick","Toyota","Kia","Honda","Hyundai","Volvo","Mini","Mercedes-Benz","Volkswagen","Ford","Lincoln","Scion","Acura","Chevrolet","Nissan","Infiniti","GMC","Cadillac","Dodge","Land","Rover","Mitsubishi","Jeep","Fiat"];var modelo =[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30];var annio =[2020,2019,2018,2020,2020,2020,2018,2018,2020,2020,2020,2018,2018,2020,2020,2019,2020,2020,2019,2019,2020,2020,2019,2019,2019,2020,2019,2019,2018,2020];var listaAutos =[];functionautoN(marca, modelo, annio){this.marca= marca;this.modelo= modelo;this.annio= annio;}for(var i =0; i<30; i++){var autoNuevo =newautoN(marca[i],modelo[i],annio[i]); listaAutos.push(autoNuevo);}// Luego se nos solicito que filtremos los carros por medio del año actual, ya que deseaban saber la cantidad de autos nuevos ingresados. Gracias a nuestro trabajo esto se podía saber de la siguiente manera:var autosFiltrados = listaAutos.filter(function(auto){return auto.annio===2020;});console.log(autosFiltrados);// Así logramos obtener una lista con todos los autos del año 2020 c:// Posterior a eso, se necesitaba obtener una lista urgentemente de las marcas de los 30 autos que acababan de ingresar por razones ajenas que no nos interesan c: Obviando que nosotros ya tenemos esta lista creada xD y queremos usar js para esto, esta tarea es tan sencilla como hacer: var marcasRecientes = listaAutos.map(function(auto){return auto.marca;});console.log(marcasRecientes);// Así obtenemos nuestra lista de marcas recientemente ingresadas c:
jajaja, no esperaba que funcionara con esos emojis!!! 😁👍
genial por los emojis :D
Solo quería pasar por acá a decirles que tenia algo de temor de que mi cabeza no estuviera preparada para asimilar este nuevo conocimiento. Sin embargo, he notado que a medida que pasan los días hay conceptos que se quedan algo así como naturalizados en mi cabeza, y fluyen con facilidad cuando es momento de aplicarlos. Un saludo y animo.
(Recuerdo que en el curso de básico de Python.Cada nueva clase me decía
"Esto es muy difícil, ¿Cómo le voy a entender?"Pero con tiempo y esfuerzo lograba entenderlo, no fue sencillo, a veces solo lo dejaba, pero al volver después de descansar podía comprenderlo totalmente.```
gracias por estos comentarios compañeros, tambien pienso que es dificil y que no voy a lograr entender nada, pero ustedes con estos mensajes me ayudan a seguir adelante. Exitos para ustedes
Hay un montón de métodos útiles que harán vuestra vida más sencilla y que vuestro código sea más eficiente!!!
Ohh la "u" se acerca a la pronunciación pero lo correcto es con "A'', en inglés suena como una "A" combinada con una "E". Puedes ver la pronunciación de Amazon por ejemplo.
Resumen :)
Métodos para recorrer arrays.
**1. .filter **
Este método sirve para filtrar contenido específico de un array, y es muy útil para cuando tenemos una gran cantidad de objetos dentro de ese array.
Para poder utilizarlo, es necesario crear una nueva variable a la cual se le va a asignar la referencia del array y el método precedido por un punto (.).
Ejemplo:
var artículos =[{nombre: “compu”,costo:200},{nombre: “TV”,costo:500},{nombre: “bici”,costo:1000}];Var artículos_Filtrados = artículos.filter();
Dentro del método se puede utilizar una función para obtener los datos específicos que necesitemos. Para esta función, el parámetro será cualquier palabra – ++esta palabra tiene que ser descriptiva y es importante porque de este elemento extraeremos el dato que necesitamos++- para este ejemplo, el parámetro será ‘artículo’, y la tarea será un return artículo.costo >= 500;
Con esta función lograremos extraer los artículos que tengan un costo mayor o igual a 500.
*Vale recalcar que nos regresará los datos en forma de objeto.
La declaración de la nueva variable con el método aplicado quedaría así:
var artículos_Filtrados = artículos.filter(function(articulo){return articulo.costo>=500;});
Para obtener el resultado que necesitamos, solamente tenemos que llamar la variable artículos_Filtrados.
2. Map
Este método permite obtener datos específicos que son retornados en forma de string.
La implementación es similar a la del método .filter.
Primero, tenemos que crear una nuevo array. Después, se manda a llamar el array en donde tenemos el dato que necesitamos y también pasamos el método map precedido por un punto. Como tercer paso, creamos la función que nos regrese el dato específico, y, por último, mandamos a llamar el nuevo array para visualizar los datos.
Ejemplo:
var artículos =[{nombre: “compu”,costo:200},{nombre: “TV”,costo:500},{nombre: “bici”,costo:1000}];
++Primero++Creamos array:
var nombre_Articulos
++Segundo++Le asignamos el array de referencia y el método:
var nombre_Articulos = artículos.map(){};
++Tercero++Creamos la función dentro del método:
function(objetivo){return objetivo.nombre;}
++Resultado final.++
var nombre_Articulos = artículos.map(function(objetivo){return objetivo.nombre;});
**Vale recalcar que nos regresará los datos en forma de array.
Esta es una forma de hacerlo con arrow function y notación corta:
Que gran dato, muchas gracias por compartir,
te ganaste un like, grazie
No entiendo como manda como parámetro a la función "articulo" si nunca se ha declarado. Lo que se ha declarado es "articuloS" que es un array... AYUDA !!
¡Hola SirDeyvi!
.
Voy a tratar de explicarte que está pasando ahí. Voy a arrancar por lo que ya conoces. Articulos es un array ¿cierto?, pues los arrays tienen ciertos métodos que podemos usar para manipularlos. En este caso el método que se está utilizando es el método map.
.
¿Qué hace map? Pues lo que hace es que recorre todos los elementos de un array y les aplica una función, esto sin alterar el arrray original. Te voy a dar un ejemplo rápido:
.
//Declaremos un array de númerosvar numeros =[1,2,3,4,5]//Creemos un nuevo array aplicando una función a cada número dentro del array numerosvar dobles = numeros.map(function(numero){return numero *2})console.log(numeros)console.log(dobles)//Resultado en la consola//[1,2,3,4,5]//[2,4,6,8,10]
Fíjate que en este caso tampoco declaré en ningún lado "numero" y eso es sencillamente porque eso es un parámetro.
.
Le coloco número porque yo sé que el array está compuesto exclusivamente por números, pero pude haber escrito "x" o "y" eso lo único que representa es un elemento dentro del array que estás recorriendo.
.
Lo traduciría como "Crea un nuevo array multiplicando a cada numero dentro del array numeros por dos"
.
En el ejercicio de la clase la función lo único que hace es recorrer cada uno de los objetos dentro del array articulos (que lo llamamos articulo por darle un nombre descriptivo) y consultar su nombre.
.
Algo importante a tener en cuenta es que la función que estás pasando con map en este caso no tiene nombre, no es la función articulo. Es una función anónima cuyo parámetro es la articulo (recuerda que este parámetro puede ser cualquier nombre que quieras).
como lo explica el compañero el nombre articulo que se le pasa como parametro a la función nos sirve para que en cada iteración del metodo map se pueda identificar cada uno de los elementos que estan dentro del array.
RECORRER EL CONTENIDO DEL ARRAY:
- filter: filtra en base a validaciones (genera un nuevo array)
- map: regresa un atributo de los objetos (genera un nuevo array)
No había entendido bien lo de map(); , muchas gracias
**Lista de métodos nativos para divertirse con arrays en JavasCript **
-Looping with .forEach
-Asserting with .some and .every
-Subtleties in .join and .concat
-Stacks and queues with .pop, .push, .shift, and .unshift
-Model mapping with .map
-Querying with .filter
-Ordering with .sort
-Computing with .reduce, .reduceRight
-Copying a .slice
-The power of .splice
-Lookups with .indexOf
-The in operator
-Going in .reverse
gracias por el aporte
No olvides escribir el ( ; ) al final de cada sentencia.
¿por que en la función del método .map() puedo escribir como parámetro "articulo" o "articulos" y obtengo el mismo resultado?
var nombreArticulos = articulos.map(function(++articulo++){
return ++articulo++.nombre;
});
var nombreArticulos = articulos.map(function(++articulos++){
return ++articulos++.nombre;
});
Hola dariusv!
Es porque el parámetro de la función es solamente un nombre con el cual se recorrerá el array.
Puedes ponerle 'pepito' si quieres y funcionará, pero es una buena práctica usar nombres que hagan referencia con lo que se está trabajando.
En este caso se usa 'Articulos' en plural para el array, porque son muchos. Y en el parámetro se usa 'Articulo' en singular porque es un solo artículo del array. El map() irá articulo por artículo recorriendo el array.
Espero me haya explicado.
Saludos :)
Tengo la misma duda, no entiendo la lógica porque al poner un parametro con x nombre,que no tiene ninguna relación con la variable buscada igual lo encuentraa.. me explota la cabeza no entenderlo ajjaj
Este profesor lo hace todo mas facil, enhorabuena! gracias!
...
Que tal compañeros, les comparto mis apuntes que describen la logica detras de estos métodos de recorrido, considero que cuando entendemos la logica detras de estas las podremos aplicar de mejor manera. Porque cuando solo las memorizamos tal cual, nos quedaremos cortos al aplicarlas. Espero les sea de ayuda.
Si instalan la extensión Code Runner en VsCode, pueden ejecutar su código y ver el OutPut en una ventana en la parte inferior del VSC. En la parte superior aparecerá la opción run code.