Saltar al contenido principal

Vista General - Arrays

Paquete: @tiendana/utils

Utilidades para manipular, transformar, buscar y agrupar arrays de forma eficiente.

Funciones Disponibles​

Transformación​

distinct - Elimina duplicados de un array. Opcionalmente por clave específica de objetos.

distinct([1, 2, 2, 3, 1])  // [1, 2, 3]
distinct(users, 'id') // usuarios únicos por id

toArray - Convierte cualquier valor a array. Si ya es array, lo retorna sin cambios.

toArray('hello')        // ['hello']
toArray(['a', 'b']) // ['a', 'b']
toArray(undefined) // [undefined]

Agrupación​

arrayGroupBy - Agrupa elementos de un array por el valor de un campo específico.

const users = [
{ name: 'Ana', role: 'admin' },
{ name: 'Juan', role: 'user' },
{ name: 'María', role: 'admin' }
];

arrayGroupBy(users, 'role');
// {
// admin: [{ name: 'Ana', ... }, { name: 'María', ... }],
// user: [{ name: 'Juan', ... }]
// }

Búsqueda​

getObjectByValue - Busca el primer objeto en un array que coincida con un campo y valor.

const user = getObjectByValue(users, 'email', 'ana@example.com');
// { name: 'Ana', email: 'ana@example.com', ... }

getObjIndexByValue - Obtiene el índice del primer objeto que coincida.

const index = getObjIndexByValue(users, 'id', 123);
// 2

Uso Común​

Eliminar Duplicados de Lista​

import { distinct } from '@tiendana/utils';

const tags = ['javascript', 'react', 'javascript', 'angular', 'react'];
const uniqueTags = distinct(tags);
// ['javascript', 'react', 'angular']

// Por ID de objetos
const uniqueUsers = distinct(users, 'id');

Agrupar Datos para Mostrar​

import { arrayGroupBy } from '@tiendana/utils';

const products = [
{ name: 'Laptop', category: 'electronics' },
{ name: 'Shirt', category: 'clothing' },
{ name: 'Phone', category: 'electronics' }
];

const grouped = arrayGroupBy(products, 'category');
// {
// electronics: [Laptop, Phone],
// clothing: [Shirt]
// }

// Renderizar en categorías
Object.keys(grouped).forEach(category => {
console.log(`Category: ${category}`);
grouped[category].forEach(product => {
console.log(` - ${product.name}`);
});
});

Buscar en Arrays de Objetos​

import { getObjectByValue, getObjIndexByValue } from '@tiendana/utils';

// Buscar usuario por email
const user = getObjectByValue(users, 'email', 'admin@example.com');

// Actualizar en posición específica
const index = getObjIndexByValue(products, 'sku', 'PROD-123');
if (index !== undefined) {
products[index] = { ...products[index], stock: 10 };
}

Normalizar Input a Array​

import { toArray } from '@tiendana/utils';

// API que puede retornar string o array
function processCategories(categories: string | string[]) {
const categoriesArray = toArray(categories);

categoriesArray.forEach(cat => {
console.log(cat);
});
}

processCategories('electronics'); // funciona
processCategories(['electronics', 'toys']); // funciona

Características​

✅ Type-safe - Tipos genéricos para TypeScript
✅ Eficiente - Usa Set para distinct, O(n) para búsquedas
✅ Flexible - Funciona con primitivos y objetos
✅ Sin mutación - Retorna nuevos arrays sin modificar originales