目次
- 1 1. Introducción
- 2 2. ¿Qué es Underscore.js?
- 3 3. Métodos de instalación
- 4 4. Uso básico
- 4.1 1. Iteración de arreglos – _.each()
- 4.2 2. Mapeo de arreglos – _.map()
- 4.3 3. Buscar el primer elemento que cumpla una condición – _.find()
- 4.4 4. Filtrar todos los elementos que cumplan una condición – _.filter()
- 4.5 5. Mezclar elementos de un arreglo – _.shuffle()
- 4.6 6. Eliminar duplicados de un arreglo – _.uniq()
- 4.7 Resumen
- 5 5. Uso avanzado
- 6 6. Manipulación de objetos
- 7 7. Manipulación de funciones
- 8 8. Funciones utilitarias
- 9 9. Conclusión
- 10 Preguntas frecuentes (FAQ)
- 10.1 Q1: ¿Underscore.js es gratuito?
- 10.2 Q2: ¿Cuál es la diferencia entre Underscore.js y Lodash?
- 10.3 Q3: ¿Sigue siendo necesario con ES6+?
- 10.4 Q4: ¿En qué tipo de proyectos es recomendable?
- 10.5 Q5: ¿Cómo se instala?
- 10.6 Q6: ¿Dónde está la documentación oficial?
- 10.7 Q7: ¿Es recomendable para proyectos grandes?
- 10.8 Q8: ¿Existen otras formas de controlar funciones?
- 10.9 Q9: ¿Qué precauciones debo tener?
- 10.10 Q10: ¿Se recomienda como motor de plantillas?
1. Introducción
JavaScript es un lenguaje de programación esencial en el desarrollo web, pero la manipulación de arreglos y objetos puede volverse fácilmente compleja. En especial, en procesos como el filtrado y la transformación de datos, se requiere una escritura más clara y eficiente. Aquí es donde resulta útil la librería de JavaScript llamada Underscore.js. Con esta librería, es posible simplificar la escritura de operaciones de datos que de otra manera serían complicadas.Ventajas de Underscore.js
- Simplificación del código
- Con JavaScript tradicional, ciertos procesos tienden a ser redundantes; con Underscore.js se pueden escribir en pocas líneas.
- Gran variedad de funciones útiles
- Ofrece funciones para manipulación de arreglos, manejo de objetos, control de funciones y mucho más.
- Ligera y flexible
- Permite usar directamente las funciones necesarias, minimizando el impacto en el rendimiento.
Lo que aprenderás en este artículo
- Cómo instalar y configurar Underscore.js
- Funciones básicas y ejemplos prácticos
- Casos de uso reales en proyectos de desarrollo
2. ¿Qué es Underscore.js?
Descripción general de Underscore.js
Underscore.js es una librería ligera que facilita la manipulación de datos en JavaScript. Está equipada con numerosas funciones que simplifican el trabajo con arreglos y objetos, por lo que también se le conoce como un kit de utilidades para JavaScript. Aunque JavaScript nativamente permite operaciones potentes, en ocasiones el código puede ser largo o difícil de leer. Con Underscore.js, estos problemas se resuelven, logrando un código más simple y fácil de mantener.Características principales
- Amplia colección de funciones utilitarias
- Incluye funciones para manipulación de arreglos, manejo de objetos y control de funciones.
- Código claro y legible
- En comparación con JavaScript puro, el código se reduce y mejora la legibilidad.
- Sin dependencias
- No depende de otras librerías, lo que facilita su integración.
- Ligera y rápida
- Su tamaño reducido minimiza el impacto en el rendimiento, ideal para aplicaciones web modernas.
Comparación entre Underscore.js y Lodash
Una librería frecuentemente comparada con Underscore.js es Lodash. Lodash se basa en Underscore.js pero extiende sus funcionalidades. Algunas diferencias son:Característica | Underscore.js | Lodash |
---|---|---|
Funcionalidad | Incluye funciones utilitarias básicas | Funciones ampliadas y optimizadas |
Soporte para modularización | Parcial | Compatibilidad completa |
Rendimiento | Rápido | Más rápido y optimizado |
¿Cómo puede ayudarte Underscore.js?
Underscore.js es especialmente útil en los siguientes casos:- Manipulación de datos en arreglos
- Permite realizar operaciones como filtrado y mapeo de forma sencilla.
- Manejo de objetos
- Obtención de claves y valores, combinación de propiedades y más.
- Control de funciones
- Implementación de ejecuciones únicas, retrasadas o controladas de forma sencilla.
- Uso de funciones utilitarias
- Clasificación de datos, aleatorización e incluso funciones de plantillas.
3. Métodos de instalación
En esta sección explicaremos los pasos para integrar Underscore.js en tu proyecto. Puedes usar un CDN o descargar los archivos directamente.1. Uso de CDN
Un CDN (Content Delivery Network) permite enlazar librerías alojadas en internet de forma sencilla. Basta con agregar el siguiente código dentro de la etiqueta<head>
o al final del <body>
de tu archivo HTML:Ejemplo: Agregar a un archivo HTML
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Instalación de Underscore.js</title>
<!-- Enlace CDN de Underscore.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.13.6/underscore-min.js"></script>
</head>
<body>
<h1>Prueba de Underscore.js</h1>
<script>
// Código de prueba
const data = [1, 2, 3, 4, 5];
const evenNumbers = _.filter(data, function(num) {
return num % 2 === 0;
});
console.log(evenNumbers); // [2, 4]
</script>
</body>
</html>
Al abrir este archivo en el navegador, verás únicamente los números pares en la consola de herramientas para desarrolladores.2. Instalación con npm o yarn
También puedes instalar Underscore.js en tu entorno local o en proyectos Node.js.Instalación con npm
npm install underscore
Instalación con yarn
yarn add underscore
Ejemplo de importación en un archivo JavaScript
import _ from 'underscore';
const data = [10, 20, 30, 40];
const result = _.map(data, (num) => num * 2);
console.log(result); // [20, 40, 60, 80]
3. Uso mediante descarga directa
- Accede al sitio oficial (underscorejs.org).
- Descarga la última versión desde la sección “Download”.
- Coloca el archivo en una carpeta de tu proyecto, por ejemplo
js/
. - Enlázalo con una etiqueta
<script>
en tu HTML.
<script src="js/underscore-min.js"></script>
4. Uso con empaquetadores de módulos
Herramientas como Webpack o Parcel también permiten integrarlo fácilmente.Ejemplo con Webpack
- Instala con npm:
npm install underscore
- Importa en tu archivo JavaScript:
import _ from 'underscore';
- Usa la librería según sea necesario y compila el proyecto.
Solución de problemas
1. Error: «Uncaught ReferenceError: _ is not defined»- Verifica que el archivo de Underscore.js se haya cargado correctamente desde el CDN o la ruta local.
- Asegúrate de tener las versiones más recientes de Node.js y npm.
4. Uso básico
En esta sección veremos las funciones más utilizadas de Underscore.js con ejemplos prácticos para trabajar con arreglos y objetos.1. Iteración de arreglos – _.each()
_.each()
permite recorrer arreglos u objetos.Ejemplo
const numbers = [1, 2, 3, 4, 5];
// Mostrar cada elemento en consola
_.each(numbers, function(num) {
console.log(num);
});
Resultado:1
2
3
4
5
Puntos clave:- Funciona con arreglos y también con objetos.
- La función callback recibe el valor, el índice y la colección completa.
2. Mapeo de arreglos – _.map()
_.map()
aplica una función a cada elemento de un arreglo y devuelve un nuevo arreglo.Ejemplo
const numbers = [1, 2, 3, 4, 5];
// Multiplicar cada elemento por 2
const doubled = _.map(numbers, function(num) {
return num * 2;
});
console.log(doubled);
Resultado:[2, 4, 6, 8, 10]
3. Buscar el primer elemento que cumpla una condición – _.find()
_.find()
devuelve el primer elemento que cumpla con una condición.Ejemplo
const numbers = [1, 2, 3, 4, 5];
// Buscar el primer número mayor o igual a 3
const result = _.find(numbers, function(num) {
return num >= 3;
});
console.log(result);
Resultado:3
4. Filtrar todos los elementos que cumplan una condición – _.filter()
_.filter()
crea un nuevo arreglo con todos los elementos que cumplen la condición.Ejemplo
const numbers = [1, 2, 3, 4, 5];
// Obtener solo los números pares
const evens = _.filter(numbers, function(num) {
return num % 2 === 0;
});
console.log(evens);
Resultado:[2, 4]
5. Mezclar elementos de un arreglo – _.shuffle()
_.shuffle()
reorganiza aleatoriamente los elementos de un arreglo.Ejemplo
const numbers = [1, 2, 3, 4, 5];
// Reorganizar aleatoriamente
const shuffled = _.shuffle(numbers);
console.log(shuffled);
Resultado: (ejemplo)[3, 5, 1, 4, 2]
6. Eliminar duplicados de un arreglo – _.uniq()
_.uniq()
elimina los elementos duplicados.Ejemplo
const numbers = [1, 2, 2, 3, 4, 4, 5];
// Eliminar duplicados
const uniqueNumbers = _.uniq(numbers);
console.log(uniqueNumbers);
Resultado:[1, 2, 3, 4, 5]
Resumen
Hasta aquí hemos visto las funciones básicas de Underscore.js:_.each()
para iterar elementos_.map()
para crear nuevos arreglos_.find()
y_.filter()
para búsquedas_.shuffle()
para mezclar elementos_.uniq()
para eliminar duplicados
5. Uso avanzado
En esta sección exploraremos funciones más potentes de Underscore.js para análisis y manipulación avanzada de datos.1. Ordenar arreglos – _.sortBy()
_.sortBy()
ordena los elementos de un arreglo en base a una clave o condición.Ejemplo
const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 20 },
{ name: 'Charlie', age: 30 }
];
// Ordenar por edad
const sortedUsers = _.sortBy(users, 'age');
console.log(sortedUsers);
Resultado:[
{ name: 'Bob', age: 20 },
{ name: 'Alice', age: 25 },
{ name: 'Charlie', age: 30 }
]
2. Agrupar elementos – _.groupBy()
_.groupBy()
clasifica los elementos de un arreglo en grupos según una condición.Ejemplo
const numbers = [1.1, 2.3, 2.4, 3.5, 4.7];
// Agrupar por parte entera
const grouped = _.groupBy(numbers, function(num) {
return Math.floor(num);
});
console.log(grouped);
Resultado:{
1: [1.1],
2: [2.3, 2.4],
3: [3.5],
4: [4.7]
}
3. Contar elementos – _.countBy()
_.countBy()
permite realizar un conteo de elementos según una condición.Ejemplo
const words = ['apple', 'banana', 'apricot', 'blueberry'];
// Contar según la primera letra
const counts = _.countBy(words, function(word) {
return word[0];
});
console.log(counts);
Resultado:{
a: 2,
b: 2
}
Resumen
En esta sección aprendiste a usar funciones avanzadas:_.sortBy()
para ordenar datos_.groupBy()
y_.countBy()
para agrupar y contar
6. Manipulación de objetos
Ahora veremos funciones de Underscore.js que simplifican el manejo de propiedades y valores en objetos.1. Obtener claves y valores de un objeto
Obtener claves – _.keys()
const person = { name: 'Alice', age: 25, city: 'Tokyo' };
const keys = _.keys(person);
console.log(keys);
Resultado:['name', 'age', 'city']
Obtener valores – _.values()
const values = _.values(person);
console.log(values);
Resultado:['Alice', 25, 'Tokyo']
2. Clonar un objeto – _.clone()
_.clone()
crea una copia superficial de un objeto.const original = { name: 'Alice', age: 25 };
const clone = _.clone(original);
clone.age = 30; // Modificamos el clon
console.log(original.age); // 25
console.log(clone.age); // 30
Resumen
En esta sección aprendiste:- Usar
_.keys()
y_.values()
para obtener claves y valores - Crear copias con
_.clone()
7. Manipulación de funciones
Underscore.js también ofrece utilidades para controlar la ejecución de funciones, optimizar rendimiento y mejorar la legibilidad del código.1. Vincular funciones – _.bind()
_.bind()
asigna un objeto específico como this
al ejecutar una función.Ejemplo
const person = {
name: 'Alice',
greet: function(greeting) {
return `${greeting}, mi nombre es ${this.name}`;
}
};
const boundGreet = _.bind(person.greet, person);
console.log(boundGreet('Hola')); // Hola, mi nombre es Alice
2. Ejecutar con retraso – _.delay()
_.delay()
retrasa la ejecución de una función durante un tiempo determinado.Ejemplo
_.delay(function(message) {
console.log(message);
}, 2000, 'Se muestra después de 2 segundos');
Resultado: (tras 2 segundos)Se muestra después de 2 segundos
3. Ejecutar solo una vez – _.once()
_.once()
asegura que una función se ejecute únicamente la primera vez que se llama.Ejemplo
const initialize = _.once(function() {
console.log('Inicialización completada');
});
initialize(); // Se ejecuta
initialize(); // Ignorado
4. Memoización de funciones – _.memoize()
_.memoize()
guarda en caché el resultado de una función para evitar cálculos repetidos con los mismos argumentos.Ejemplo
const factorial = _.memoize(function(n) {
return n <= 1 ? 1 : n * factorial(n - 1);
});
console.log(factorial(5)); // Calculado
console.log(factorial(5)); // Usando caché
5. Controlar frecuencia de ejecución – _.throttle()
_.throttle()
limita la frecuencia con la que una función puede ejecutarse en un periodo de tiempo.Ejemplo
const log = _.throttle(function() {
console.log('Procesando...');
}, 2000);
// Simulación de clics rápidos
setInterval(log, 500); // Solo se ejecuta cada 2 segundos
Resumen
En esta sección aprendiste a:- Usar
_.bind()
para fijarthis
- Retrasar funciones con
_.delay()
- Ejecutar una función una sola vez con
_.once()
- Optimizar rendimiento con
_.memoize()
- Controlar la frecuencia de ejecución con
_.throttle()
8. Funciones utilitarias
Ahora veremos utilidades adicionales de Underscore.js que permiten generar valores aleatorios, verificar datos vacíos y crear plantillas de texto.1. Generar números aleatorios – _.random()
_.random()
genera un número aleatorio entero o decimal dentro de un rango especificado.Ejemplo
console.log(_.random(1, 10)); // Entero
console.log(_.random(1, 10, true)); // Con decimales
2. Verificar si un valor está vacío – _.isEmpty()
_.isEmpty()
comprueba si un arreglo, objeto o cadena está vacío.Ejemplo
console.log(_.isEmpty([])); // true
console.log(_.isEmpty({})); // true
console.log(_.isEmpty('')); // true
console.log(_.isEmpty([1, 2, 3])); // false
3. Crear plantillas – _.template()
_.template()
permite generar cadenas de texto dinámicas con valores variables.Ejemplo
const template = _.template('Hola, <%= name %>!');
console.log(template({ name: 'Alice' }));
Resultado:Hola, Alice!
Resumen
En esta sección aprendiste:- Generar números aleatorios con
_.random()
- Comprobar datos vacíos con
_.isEmpty()
- Crear cadenas dinámicas con
_.template()
9. Conclusión
Este artículo cubrió desde los conceptos básicos hasta funciones avanzadas de Underscore.js. Esta librería simplifica la manipulación de datos en JavaScript y ayuda a escribir código más eficiente y fácil de mantener.Resumen del artículo
- Uso básico – funciones esenciales para arreglos y objetos
- Uso avanzado – clasificación, agrupación y conteo
- Manipulación de funciones – control de ejecución y optimización
- Funciones utilitarias – generación aleatoria y plantillas
Palabras finales
Underscore.js es una herramienta potente para hacer el desarrollo en JavaScript más eficiente y sencillo. Te animamos a aplicarla en tus proyectos y seguir practicando para mejorar tus habilidades.Preguntas frecuentes (FAQ)
Q1: ¿Underscore.js es gratuito?
A: Sí, está disponible bajo licencia MIT y puede usarse incluso en proyectos comerciales.Q2: ¿Cuál es la diferencia entre Underscore.js y Lodash?
A: Underscore.js es más simple y ligero. Lodash amplía sus funciones, mejora el rendimiento y soporta modularización completa. La elección depende de las necesidades del proyecto.Q3: ¿Sigue siendo necesario con ES6+?
A: Aunque JavaScript moderno ofrece funciones nativas similares, Underscore.js sigue siendo útil por su compatibilidad entre navegadores y su sintaxis más compacta.Q4: ¿En qué tipo de proyectos es recomendable?
A: Es ideal para proyectos pequeños o medianos, o cuando se busca simplificar código rápidamente.Q5: ¿Cómo se instala?
A: Puede instalarse mediante:- CDN:
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.13.6/underscore-min.js"></script>
- npm:
npm install underscore
- yarn:
yarn add underscore
Q6: ¿Dónde está la documentación oficial?
A: En el sitio oficial: Underscore.jsQ7: ¿Es recomendable para proyectos grandes?
A: Puede usarse, pero Lodash suele ser más eficiente en proyectos de gran escala.Q8: ¿Existen otras formas de controlar funciones?
A: Sí, consetTimeout()
, setInterval()
, Promise
y async/await
. Sin embargo, _.throttle()
y _.debounce()
de Underscore.js simplifican estas tareas.Q9: ¿Qué precauciones debo tener?
A:- No depender innecesariamente de la librería si el mismo resultado puede lograrse con funciones nativas modernas.
- Usar siempre la última versión para evitar riesgos de seguridad.
- Considerar migrar a Lodash en proyectos más complejos.
Q10: ¿Se recomienda como motor de plantillas?
A:_.template()
es útil para casos simples, pero para proyectos más avanzados se recomienda usar librerías dedicadas como Handlebars.js o EJS.広告