Command Palette

Search for a command to run...

Métodos map() y filter(): Transformación y Filtrado

Aprende a transformar arrays creando nuevas versiones modificadas con map() y a filtrar elementos con filter(), dos métodos fundamentales para manipulación de datos.

Lectura: 15 min
Nivel: Intermedio

TL;DR - Resumen rápido

  • map() crea un nuevo array transformando cada elemento
  • filter() crea un nuevo array con elementos que cumplan una condición
  • Ambos métodos no modifican el array original
  • map() es ideal para transformar datos de un formato a otro
  • filter() es perfecto para eliminar elementos que no necesitas

Introducción a map() y filter()

Los métodos map() y filter() son dos de las herramientas más utilizadas en JavaScript para manipular arrays. map() crea un nuevo array transformando cada elemento del original, mientras que filter() crea un nuevo array que contiene solo los elementos que cumplan una condición.

Ambos métodos son inmutables, lo que significa que no modifican el array original. Esta característica es fundamental para programación funcional y permite encadenar múltiples operaciones sin efectos secundarios en los datos originales.

Métodos inmutables vs mutables

map() y filter() son inmutables: crean nuevos arrays. Métodos como sort(), reverse() osplice() son mutables: modifican el array original.

El método map()

El método map() crea un nuevo array aplicando una función a cada elemento del array original. La función recibe tres argumentos: el elemento actual, su índice y el array completo. El resultado es un nuevo array con la misma longitud que el original.

map() es especialmente útil para transformar datos de un formato a otro, como convertir strings a números, extraer propiedades de objetos, o modificar valores de forma consistente. Cada elemento se transforma independientemente de los demás.

Sintaxis de map()

La sintaxis de map() acepta una función de callback que debe retornar el valor transformado para cada elemento. Opcionalmente, puedes especificar el valor de this dentro de la función de callback.

map-sintaxis-basica.js
Loading code...

El primer ejemplo muestra cómo duplicar cada número del array. El segundo ejemplo demuestra cómo extraer una propiedad específica de objetos. El tercer ejemplo muestra cómo convertir strings a números usando Number().

Callback con índice y array

La función de callback puede recibir hasta tres parámetros: elemento,indice y array. Úsalos según necesites para tu lógica de transformación.

Usos comunes de map()

map() tiene múltiples aplicaciones prácticas en el desarrollo diario, especialmente cuando necesitas transformar datos de un formato a otro o extraer propiedades específicas de objetos.

map-usos-practicos.js
Loading code...

El primer ejemplo muestra cómo extraer nombres de un array de usuarios. El segundo ejemplo demuestra cómo convertir precios de strings a números. El tercer ejemplo muestra cómo transformar objetos agregando una propiedad calculada.

  • Extraer propiedades específicas de objetos
  • Convertir strings a números u otros tipos de datos
  • Transformar valores aplicando cálculos o fórmulas
  • Crear arrays de strings a partir de arrays de objetos
  • Normalizar datos de diferentes formatos

El método filter()

El método filter() crea un nuevo array que contiene solo los elementos que cumplan una condición especificada en una función de callback. Los elementos que no cumplan la condición se excluyen del array resultante.

filter() es especialmente útil para eliminar elementos no deseados, filtrar datos según criterios específicos, o validar arrays. A diferencia de map()que transforma todos los elementos, filter() solo incluye los que cumplan la condición.

Sintaxis de filter()

La sintaxis de filter() acepta una función de callback que debe retornar true si el elemento debe incluirse y false en caso contrario. Opcionalmente, puedes especificar el valor de this dentro de la función de callback.

filter-sintaxis-basica.js
Loading code...

El primer ejemplo muestra cómo filtrar números pares. El segundo ejemplo demuestra cómo filtrar usuarios activos. El tercer ejemplo muestra cómo filtrar strings por longitud mínima.

Retorno truthy vs booleano explícito

La función de callback debe retornar un valor booleano explícito (true ofalse). Aunque JavaScript convierte valores truthy a true y falsy a false, es más claro y seguro retornar valores booleanos.

Usos comunes de filter()

filter() tiene múltiples aplicaciones prácticas en el desarrollo diario, especialmente cuando necesitas eliminar elementos no deseados o filtrar datos según criterios específicos.

filter-usos-practicos.js
Loading code...

El primer ejemplo muestra cómo eliminar valores null de un array. El segundo ejemplo demuestra cómo filtrar productos por precio mínimo. El tercer ejemplo muestra cómo filtrar strings que contengan una subcadena específica.

  • Eliminar valores null o undefined de arrays
  • Filtrar elementos por rangos numéricos
  • Validar datos antes de procesarlos
  • Crear subconjuntos de datos según criterios
  • Implementar búsquedas avanzadas con múltiples condiciones

Combinación de map() y filter()

Una de las características más poderosas de map() yfilter() es que pueden combinarse para realizar operaciones complejas en una sola línea de código. Esta combinación permite transformar y filtrar datos de forma eficiente y legible.

combinacion-map-filter.js
Loading code...

El ejemplo muestra cómo filtrar números pares y luego duplicarlos, todo en una sola operación. Esta combinación es muy común en programación funcional y permite encadenar múltiples operaciones de forma declarativa.

Encadenamiento de métodos

Puedes encadenar map() y filter() para realizar múltiples operaciones. Por ejemplo: array.filter(condicion).map(transformacion)filtra primero y luego transforma los elementos resultantes.

Errores Comunes

Al trabajar con map() y filter(), hay varios errores comunes que puedes encontrar, especialmente relacionados con el retorno de valores y la comprensión de cómo funcionan estos métodos.

Error: No retornar valor en map()

Un error común en map() es olvidar retornar el valor transformado. Si la función de callback no retorna nada explícitamente, el array resultante contendrá valores undefined.

error-no-retornar-map.js
Loading code...

El ejemplo muestra que olvidar el return en map()crea un array con valores undefined. Siempre asegúrate de retornar el valor transformado en cada iteración de la función de callback.

Error: No retornar booleano en filter()

Otro error común en filter() es no retornar un valor booleano explícito. Aunque JavaScript convierte valores truthy a true, es más claro y seguro retornar true o false.

error-no-retornar-filter.js
Loading code...

El ejemplo muestra que olvidar el return puede causar resultados inesperados. Aunque filter() funciona con valores truthy, es mejor práctica retornar explícitamente true o false.

Error: Intentar modificar el array original

Un error común es intentar modificar el array original dentro de map()o filter(). Como estos métodos crean nuevos arrays, cualquier modificación dentro de la función de callback no afectará al array original.

error-modificar-original.js
Loading code...

El ejemplo muestra que intentar modificar el array original dentro demap() no funciona. Los métodos map() yfilter() crean nuevos arrays, por lo que no modifican el original. Usa métodos mutables como forEach() si necesitas modificar el original.

Inmutabilidad de map() y filter()

map() y filter() son inmutables: crean nuevos arrays. Si necesitas modificar el array original, usa métodos mutables comoforEach(), splice() o asignación directa.

Resumen: Métodos map() y filter()

Conceptos principales:

  • map() crea un nuevo array transformando cada elemento
  • filter() crea un nuevo array con elementos que cumplan una condición
  • Ambos métodos son inmutables, no modifican el original
  • map() es ideal para transformar datos de un formato a otro
  • filter() es perfecto para eliminar elementos no deseados

Mejores prácticas:

  • Usa map() para transformar datos de un formato a otro
  • Usa filter() para eliminar elementos que no necesitas
  • Combina map() y filter() para operaciones complejas
  • Siempre retorna el valor transformado en map()
  • Siempre retorna true/false en filter() de forma explícita