ToonJS v1.0.4: 4 Nuevos Métodos Potentes

2025-11-15Francesc Fors6 min

ToonJS v1.0.4: 4 Nuevos Métodos Potentes

Nos complace anunciar el lanzamiento de ToonJS v1.0.4, que añade 4 nuevos métodos a la librería, llevándonos a un total de 64 métodos optimizados para manipulación de datos.

🆕 Nuevos Métodos

1. findAll() - Encuentra Todas las Coincidencias

A diferencia de find() que retorna solo la primera coincidencia, findAll() devuelve todas las filas que cumplen la condición.

const data = ToonFactory.from(`
  productos[5]{nombre,categoria,precio}:
    Laptop,Electrónica,1200
    Mouse,Electrónica,25
    Teclado,Electrónica,75
    Silla,Muebles,300
    Escritorio,Muebles,500
`);

// Encuentra TODOS los productos de Electrónica
const electronics = data.findAll(p => p.categoria === 'Electrónica');
console.log(electronics);
// Retorna: [Laptop, Mouse, Teclado]

// Alternativa: usar filter().all()
const sameResult = data.filter(p => p.categoria === 'Electrónica').all();

¿Cuándo usar findAll()?

  • ✅ Cuando quieres un array directo sin crear un nuevo Toon
  • ✅ Para búsquedas simples donde no necesitas encadenar más operaciones
  • ✅ Más eficiente que filter().all() para casos de uso simples

2. countBy() - Cuenta Ocurrencias por Valor

Este método es perfecto para análisis de frecuencias y distribuciones de datos.

const ventas = ToonFactory.from(`
  ventas[8]{producto,ciudad,cantidad}:
    Laptop,Barcelona,2
    Mouse,Madrid,5
    Laptop,Barcelona,1
    Teclado,Madrid,3
    Laptop,Madrid,2
    Mouse,Barcelona,4
    Laptop,Barcelona,1
    Teclado,Barcelona,2
`);

// Cuenta cuántas ventas hay por producto
const porProducto = ventas.countBy('producto');
console.log(porProducto);
// Output: {
//   Laptop: 4,
//   Mouse: 2,
//   Teclado: 2
// }

// Cuenta ventas por ciudad
const porCiudad = ventas.countBy('ciudad');
console.log(porCiudad);
// Output: {
//   Barcelona: 5,
//   Madrid: 3
// }

Casos de uso perfectos:

  • 📊 Análisis de distribución de categorías
  • 🎯 Identificar valores más/menos frecuentes
  • 📈 Generar datos para gráficos de barras
  • 🔍 Análisis de patrones en logs o eventos

3. getName() - Obtiene el Nombre del Dataset

Método simple pero útil para obtener el nombre del dataset actual.

const data = ToonFactory.from(`
  usuarios[3]{nombre,edad}:
    Ana,25
    Luis,30
    María,28
`);

console.log(data.getName());
// Output: "usuarios"

// Útil para logging y debugging
console.log(`Procesando dataset: ${data.getName()}`);
console.log(`Total de filas: ${data.count()}`);

4. setName() - Cambia el Nombre del Dataset

Permite renombrar el dataset, útil en pipelines de transformación donde quieres documentar cada paso.

const raw = ToonFactory.from(`
  datos[4]{valor,estado}:
    100,activo
    200,inactivo
    150,activo
    300,activo
`);

// Pipeline con nombres descriptivos
const filtered = raw
  .filter(r => r.estado === 'activo')
  .setName('datos_activos');

const normalized = filtered
  .map(r => ({ ...r, valor_norm: r.valor / 100 }))
  .setName('datos_normalizados');

console.log(filtered.getName());     // "datos_activos"
console.log(normalized.getName());   // "datos_normalizados"

// Útil al exportar
const toonStr = normalized.toToon();
// Incluye el nombre "datos_normalizados" en el formato TOON

📈 ToonJS Ahora Tiene 64 Métodos

Con estos 4 nuevos métodos, ToonJS alcanza los 64 métodos optimizados, cubriendo:

  • 🔍 Búsqueda y Filtrado: find, findAll, findIndex, filter, where, search
  • 📊 Agregación: count, countBy, sum, avg, min, max, stats
  • 📈 Estadísticas Avanzadas: correlation, covariance, stdDev, variance
  • ⏱️ Series Temporales: rolling, lag, lead, diff, pctChange, cumsum
  • 🔄 Transformaciones: map, reduce, sortBy, groupBy, pivot, transpose
  • 🧮 Operaciones Matriciales: toMatrix, fromMatrix, dotProduct, normalize
  • 💾 Exportación: toToon, toCSV, toJSON, toTable, toMarkdown
  • 🎯 Utilidades: getName, setName, clone, distinct, unique

🚀 Instalación

Actualiza a la última versión:

npm install @cescofors/toonjs@latest

🔗 Más Información

¿Qué método nuevo te resulta más útil? Cuéntanos en GitHub!