UNPKG

@aldoivan10/linked-array

Version:
128 lines (96 loc) 4.42 kB
# LinkedArray LinkedArray es una extensión de la clase `Array` en TypeScript que proporciona funcionalidades avanzadas como mover, intercambiar, obtener elementos por índices negativos (similar a Python), y mucho más. Funciona como un array estándar de JavaScript, por lo que puedes usar todas sus funciones nativas junto con las nuevas capacidades. ## Características principales - Funcionalidades adicionales como `move`, `swap`, `first`, `last`, entre otras. - Soporte para índices negativos, como en Python. - Métodos para ordenamiento flexible, incluyendo soporte para objetos y atributos anidados. - Totalmente compatible con TypeScript. ## Instalación Puedes instalar esta librería usando npm: ```bash npm install @aldoivan/linked-array pnpm add @aldoivan/linked-array ``` ## Uso ```javascript import { LinkedArray } from "@aldoivan10/linked-array" const array = new LinkedArray(1, 2, 3, 4, 5) console.log(array[0]) // 1 console.log(array.first()) // 1 console.log(array.last()) // 5 console.log(array[-2], array.index()) // 4 0 pero no mueve el índice interno console.log(array.at(-1), array.index()) // 5 4 array.move(0, 2) console.log(array) // [2, 3, 1, 4, 5] array.swap(0, 1) console.log(array) // [3, 2, 1, 4, 5] console.log(array.next()) // 3 console.log(array.previous()) // 5 console.log(array.current()) // 5 const objArr = new LinkedArray({ name: "Aldo" }) const clone = objArr.clone() clone[0].name = "Ivan" console.log(objArr, clone) // [{ name: "Aldo" }] [{ name: "Ivan" }] objArr.push({ name: "Lau" }) console.log(objArr) // [{ name: "Aldo" }, { name: "Lau" }] ``` ## Ordenamiento Avanzado ## Numeros, cadenas, etc. ```javascript import { LinkedArray } from "@aldoivan10/linked-array" const numArray = new LinkedArray(5, 3, 8, 1, 9) const sortedNumArrayAsc = numArray.sorted() // numArray.sorted({ order: "asc" }) console.log(sortedNumArrayAsc) // [1, 3, 5, 8, 9] const sortedNumArrayDesc = numArray.sorted({ order: "desc" }) console.log(sortedNumArrayDesc) // [9, 8, 5, 3, 1] ``` ### Objetos ```typescript interface Person { name: string age: number address: { city: string zip: number } } const people = new LinkedArray<Person>( { name: "Alice", age: 30, address: { city: "New York", zip: 10001 } }, { name: "Bob", age: 25, address: { city: "Los Angeles", zip: 90001 } }, { name: "Charlie", age: 35, address: { city: "Chicago", zip: 60601 } } ) const sortedPeopleByAgeAsc = people.sorted({ attr: "age" }) // order = 'asc' console.log(sortedPeopleByAgeAsc) // [ // { name: 'Bob', age: 25, address: { city: 'Los Angeles', zip: 90001 } }, // { name: 'Alice', age: 30, address: { city: 'New York', zip: 10001 } }, // { name: 'Charlie', age: 35, address: { city: 'Chicago', zip: 60601 } } // ] const sortedPeopleByCityAsc = people.sorted({ order: "desc", attr: "address.city", }) console.log(sortedPeopleByCityAsc) // [ // { name: 'Alice', age: 30, address: { city: 'New York', zip: 10001 } }, // { name: 'Bob', age: 25, address: { city: 'Los Angeles', zip: 90001 } }, // { name: 'Charlie', age: 35, address: { city: 'Chicago', zip: 60601 } }, // ] ``` ## Métodos - `clean()`: Limpia el array. - `replace(array: Array<T>, index?: number)`: Reemplaza el contenido del array e inicializa el índice interno. - `first()`: Retorna el primer elemento del array. - `last()`: Retorna el último elemento del array. - `current()`: Retorna el elemento actual según el índice interno. - `move(fromIndex: number, toIndex: number)`: Mueve un elemento a una nueva posición. - `swap(index1: number, index2: number)`: Intercambia dos elementos. - `next()`: Retorna el siguiente elemento (con índice circular). - `previous()`: Retorna el elemento anterior (con índice circular). - `index()`: Retorna el índice interno actual. - `at(index: number)`: Retorna el elemento en una posición específica. - `clone()`: Clona el array (incluidos los objetos internos). - `removeAt(index: number)`: Elimina un elemento en una posición dada. - `sorted({ order?: 'asc' | 'desc' = 'asc', attr?: string }?)`: Ordena el array según los parámetros. ## Licencia Este proyecto está licenciado bajo la [Licencia MIT](https://mit-license.org/).