Filtrado de Arrays en JavaScript con el Método Filter
Clase 8 de 28 • Curso de Manipulación de Arrays en JavaScript
Resumen
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.
Este proceso 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 quethis
en arrow functions es el objeto global.
let 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.map(function(element, index, array))
Diferencia entre la estructura for y el método filter
Los métodos de arrays nos permiten realizar algoritmos con una menor cantidad de líneas que una estructura for
, con un resultado igual o parecido.
Por ejemplo, hagamos un algoritmo que filtre los elementos que tengan más de 6 letras en un array de palabras.
Si empleamos la estructura for
, necesitaremos un array adicional vacío y usarlo con el método push
para agregar los elementos que cumplan la condición. El método push
es mutable.
const words = ["spray", "elites", "limit", "apple", "exuberant"]
const newWords = []
for(let i=0; i< words.length; i++){
const word = words[i]
if (word.length >= 6){
newWords.push(word)
}
}
console.log(newWords) // [ 'elites', 'exuberant' ]
Con el método filter
, solo debemos establecer la función que indique la condición a cumplir para cada elemento.
const words = ["spray", "elites", "limit", "apple", "exuberant"]
const newWords = words.filter( function(word){
if (word.length >=6){
return true
}else{
return false
}
})
// o
const newWords = words.filter(word => word.length >= 6)
console.log(newWords) // [ 'elites', 'exuberant' ]
Recuerda siempre retornar un valor en la función callback
del método.
Filtrar elementos a partir de la propiedad de un objeto
Con el método filter
puedes filtrar los objetos de un array a partir de una condición referente a la propiedad de cada elemento.
Teniendo en cuenta que el nuevo array contendrá el objeto completo que haya cumplido con la condición especificada.
const orders = [
{
customerName: "Nicolas",
total: 60,
delivered: true,
},
{
customerName: "Zulema",
total: 120,
delivered: false,
},
{
customerName: "Santiago",
total: 180,
delivered: true,
},
{
customerName: "Valentina",
total: 240,
delivered: true,
},
]
Por ejemplo, filtremos los elementos del array orders
cuyo total sea mayor a 150.
const newOrders = orders.filter(order => order.total > 150)
console.log(newOrders)
/* [
{
customerName: 'Santiago',
total: 180,
delivered: true
},
{
customerName: 'Valentina',
total: 240,
delivered: true
}
]
*/
Contribución creada por: Andrés Guano.