• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Estadística
      • Calculadora del Tamaño Muestral en Encuestas
      • Calculadora de estadísticos descriptivos
      • Test de normalidad
      • Calculadora de contrastes de hipotesis
      • Calculadora de tamano del efecto
      • Simulador de Regresión Lineal con Ruido
      • Visualizador de PCA
      • Visualizador de Series Temporales
      • Simulador de Regresión Logística
      • Simulador de K-Means
      • Simulador de DBSCAN
      • Detector de la Ley de Benford
    • Probabilidad
      • Calculadora de Probabilidad de Distribuciones
      • Calculadora de Probabilidades de Lotería
      • Simulador del Problema de Monty Hall
      • Simulador de la Estrategia Martingala
    • Finanzas
      • Calculadora de Préstamos e Hipotecas
      • Conversor TIN ↔ TAE
      • Calculadora DCA con ajuste por inflación
      • Calculadora XIRR con Flujos Irregulares
      • Simulador FIRE (Financial Independence, Retire Early)
    • Riesgo
      • Constructor de Scorecards de Crédito
      • Aplicar Scorecard de Crédito
    • Herramientas
      • Formateador / Minificador de JSON
      • Conversor CSV ↔ JSON
      • Comparador y Formateador de Texto y JSON
      • Formateador y Tester de Expresiones Regulares
      • Inspector de JWT
      • Generador y verificador de hashes
      • Codificador / Decodificador Base64 y URL
      • Conversor de bases numericas
      • Conversor de Timestamp Unix
      • Conversor de colores
      • Generador de UUIDs
    • Juegos
      • Tres en Raya
      • Nim con Q-Learning
    • Más
      • Método D’Hondt
      • Generador de Contraseñas Seguras
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • R
  • Excel

Métodos para operar sobre arrays en JavaScript de forma eficiente

noviembre 4, 2019 Por Daniel Rodríguez 1 comentario
Tiempo de lectura: 5 minutos

A la hora de trabajar con vectores de objetos el paradigma declarativo utilizado habitualmente el JavaScript puede ser un poco pesado. En estos suele ser más cómodo utilizar paradigma de programación funcional. JavaScript dispone de múltiples métodos para utilizar programación funcional, algunos de los más conocidos son map(), reduce(), filter() y find(). En esta entrada se va a mostrar como utilizar estos métodos para operar sobre arrays en JavaScript de forma eficiente.

Tabla de contenidos

  • 1 La programación funcional
    • 1.1 filter()
    • 1.2 find()
    • 1.3 every()
    • 1.4 some()
    • 1.5 map()
    • 1.6 reduce()
  • 2 Combinación de los métodos para operar sobre arrays en JavaScript
  • 3 Conclusiones

La programación funcional

En su gran mayoría el código JavaScript se escribe bajo el paradigma declarativo. Un paradigma en el que cada línea es una instrucción en un proceso que ha de ser ejecutada en un orden concreto. En muchas ocasiones el orden de ejecución de las instrucciones puede ser indiferente, como puede ser a la hora de sumar los números de un vector.

Tradicionalmente estos problemas se resuelven mediante la utilización de un bucle. Pero los métodos de programación funcional permiten hacer esto de forma más eficiente. Para trabajar bajo este paradigma JavaScript disponemos de los métodos filter(), find(), map(), reduce(), every() y some()cuyo funcionamiento básico se explicará a continuación.

filter()

El método filter() permite buscar a los registros de un array que cumple una condición. Devolviendo como resultado un nuevo array con estos elementos.

A modo de ejemplo se puede utilizar un listado de clientes generado aleatoriamente para buscar aquellos que hubiesen gastado más de una cantidad. En el siguiente ejemplo se muestra cómo utilizar filter().

Nuevo test de normalidad interactivo en el laboratorio de Analytics Lane
En Analytics Lane
Nuevo test de normalidad interactivo en el laboratorio de Analytics Lane

const clients = [{
	"id": 1,
	"name": "Adria Zack",
	"amount": 22.68
}, {
	"id": 2,
	"name": "Libby Willerstone",
	"amount": 11.91
}, {
	"id": 3,
	"name": "Antonetta Brandli",
	"amount": 6.91
}, {
	"id": 4,
	"name": "June Moverley",
	"amount": 7.93
}, {
	"id": 5,
	"name": "Kendrick Lindell",
	"amount": 18.13
}];
	
const spend = clients.filter(client => {
	return client.amount > 10;
});

// El resultado en spend es
// [ { id: 1, name: 'Adria Zack', amount: 22.68 },
//   { id: 2, name: 'Libby Willerstone', amount: 11.91 },
//   { id: 5, name: 'Kendrick Lindell', amount: 18.13 } ]

Lo primero que vemos es que filter() es un método del array al que hay que inyectar una función para aplicar sobre cada uno de los elementos que devuelve un valor verdadero o falso. Siendo seleccionados únicamente los elementos en los que la función devuelve el valor verdadero.

A pesar de ser un código ya compacto la función se puede simplificar. Como el método solamente tiene una línea se pueden eliminar las llaves y la palabra clave return.

const spend = clients.filter(client => client.amount > 10)

Esta línea devuelve los mismos resultados que todas la anteriores, pero es más compacta. Lo que permite dejar el código mucho más compacto y legible.

Publicidad


find()

Cuando solamente se desea identificar un registro que verifica la condición se puede utilizar find() en lugar defilter(). A diferencia del caso anterior el método no devuelve un array sino que el primer objeto que cumpla con la condición. Aplicando este método en el ejemplo anterior se obtendría.

const first = clients.find(client => client.amount > 10);

// El resultado en first es
// { id: 1, name: 'Adria Zack', amount: 22.68 }

every()

Si solamente se quiere comprobar que se cumple una condición se puede utilizar el método every(). Este método devuelve verdadero si todos los registros cumplen con la condición indicada o falso en caso contrario. Lo que permite comprobar si todos los clientes han realizado un gasto mínimo dato.

clients.every(client => client.amount > 5)  // true
clients.every(client => client.amount > 10) // false

En la primera línea el resultado es verdadero porque todos los clientes han gastado más de 5. Pero no así en la segunda, ya que hay clientes que han gastado menos de 10.

some()

Por otro lado para comprobar si algún registro cumple una condición se utilizará el método some(). Este devuelve verdadero si algún registro cumple la condición y falso en caso contrario.

clients.some(client => client.amount > 10) // true
clients.some(client => client.amount > 30) // false

Publicidad


map()

El método map() permite aplicar la función a cada uno de los registros y devolverá un nuevo array con los resultados. Por ejemplo, se puede obtener fácilmente un array con el nombre de los clientes.

const names = clients.map(client => client.name);

// El resultado en names es
// [ 'Adria Zack',
//   'Libby Willerstone',
//   'Antonetta Brandli',
//   'June Moverley',
//   'Kendrick Lindell' ]

reduce()

Finalmente, para obtener un único resultado se dispone del método reduce(). El cual es ligeramente diferente a los vistos anteriormente. En primer lugar, la función a inyectar requiere dos parámetros. El primero es el resultado del paso anterior y el segundo es el elemento evaluado actualmente. Como en la primera iteración no hay un valor previo se pasan los dos elementos del array.

Este método se puede utilizar para obtener el gasto total de los clientes. Lo que se puede hacer como se muestra a continuación.

const amount = clients.reduce((a, b) => {
	return { "amount": a.amount + b.amount };
});

// El resultado en amount es
//  { amount: 67.56 }

Otra alternativa es evaluar si la primera entrada es un elemento del array o un número.

const totalamount = clients.reduce((a, b) => {
	if (a.hasOwnProperty('amount')){
		return a.amount + b.amount;
	}else{
		return a + b.amount;
	}
});

Combinación de los métodos para operar sobre arrays en JavaScript

Si estos métodos son ya potentes por sí solos juntos lo son aún más. Es posible combinar todos ellos para crear complejas operaciones con poco código. Por ejemplo, obtener el nombre de los clientes que han comprado más de una cantidad. Para lo que en primer lugar es necesario aplicar el método filter() y posteriormente el método map(). Antes de aplicar el método map() no es necesario guardar los datos en una variable ya se puede aplicar directamente sobre la salida del método filter().

const names_10 = clients.filter(client => client.amount > 10).map(client => client.name);

Publicidad


Conclusiones

En esta entrada se han visto seis métodos para operar sobre arrays en JavaScript que permite producir código más compacto y claro. Una de las grandes ventajas de la programación funcional. Aunque hay que tener en cuenta que suelen ser más lentos que los bucles for, como se muestra en esta comparativa del rendimiento de los métodos de iteración en JavaScript. Salvo que el rendimiento sea clave y se trabaje con una cantidad enorme de registros estos métodos son una buena solución para mejorar nuestro código.

Imágenes: Pixabay (pasja1000)

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 0 / 5. Votos emitidos: 0

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicaciones relacionadas

  • Nuevo test de normalidad interactivo en el laboratorio de Analytics Lane
  • Nuevo conversor de timestamp Unix en el laboratorio de Analytics Lane
  • Calculadora de Contrastes de Hipótesis: interpreta correctamente el p-valor y toma decisiones estadísticas con confianza
  • Calculadora de Tamaño del Efecto: la herramienta clave para entender cuánto importa realmente una diferencia
  • Simulador de DBSCAN: descubre cómo encontrar clusters reales (y ruido) sin fijar K
  • Conversor de Colores: convierte, compara y valida cualquier color en tiempo real
  • Analytics Lane lanza su Generador de UUIDs: identificadores únicos, seguros y listos para producción en segundos
  • 1200 publicaciones en Analytics Lane
  • Analytics Lane lanza su Conversor TIN ↔ TAE: la herramienta definitiva para entender el coste real de depósitos, préstamos e hipotecas

Publicado en: JavaScript

Interacciones con los lectores

Comentarios

  1. Top 10 seo dice

    octubre 11, 2024 a las 4:21 am

    Me gusta las formas y comentarios. Son top 10.

    Responder

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

Costes hundidos en ciencia de datos: cuándo mantener un modelo y cuándo migrar

mayo 7, 2026 Por Daniel Rodríguez

WOE e IV: La Base Matemática del Credit Scoring

mayo 5, 2026 Por Daniel Rodríguez

Noticias

Lanzamiento de la versión 1.0 del laboratorio de Analytics Lane con nuevas herramientas de scoring

mayo 2, 2026 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Gráficos de barras en Matplotlib publicado el julio 5, 2022 | en Python
  • Truco SQL: La distancia de Levenshtein en SQL Server publicado el diciembre 11, 2020 | en Herramientas
  • Gráficos de correlación en Seaborn: Mapas de calor y gráficos de pares publicado el julio 27, 2023 | en Python
  • Reglas de asociación y market-basket analysis publicado el agosto 31, 2018 | en Ciencia de datos
  • Exactitud, precisión, recall… qué mide realmente cada métrica (y qué no) publicado el marzo 3, 2026 | en Ciencia de datos

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.9 (11)

Pandas: Cambiar los tipos de datos en los DataFrames

Comentarios recientes

  • M. Pilar en Cómo eliminar las noticias en Windows 11 y recuperar tu concentración
  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • CARLOS ARETURO BELLO CACERES en Justicio: La herramienta gratuita de IA para consultas legales
  • Piera en Ecuaciones multilínea en Markdown

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2026 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto