typescript-arrays

Uso del Array en TypeScript

En TypeScript, un array es una colección ordenada de elementos, que pueden ser de cualquier tipo (aunque generalmente son homogéneos).

TypeScript proporciona varias formas de declarar y manipular arrays, haciendo que el manejo de colecciones de datos sea bastante cómodo y sencillo.

Existen dos sintaxis principales para declarar un array en TypeScript. La más habitual es empleando corchetes ([]), de la siguiente forma.

let numeros: number[] = [1, 2, 3, 4, 5];
let palabras: string[] = ["TypeScript", "JavaScript", "Node.js"];

Alternativamente podemos usando la Clase Genérica Array<T>

let numeros: Array<number> = [1, 2, 3, 4, 5];
let palabras: Array<string> = ["TypeScript", "JavaScript", "Node.js"];

Generalmente usaremos la primera, salvo en algún caso avanzado (como factorías) en las que deberemos usar el segundo

Arrays Multidimensionales

Los arrays multidimensionales (matrices) se pueden declarar anidando arrays.

let matriz: number[][] = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];

Iteración sobre Arrays

TypeScript soporta la iteración mediante bucles tradicionales y la sintaxis for...of.

for (let i = 0; i < numeros.length; i++) {
    console.log(numeros[i]);
}

for (let num of numeros) {
    console.log(num);
}

Además, disponemos del método forEach, que es un método de Array que cumple la misma función (lo veremos en el siguiente apartado)

Métodos y Propiedades de Arrays

TypeScript hereda los métodos y propiedades de arrays de JavaScript, por lo que tenemos una gran cantidad de funciones disponibles manipular y operar con arrays.

  • length: Devuelve el número de elementos en el array.
let numeros: number[] = [1, 2, 3, 4, 5];
console.log(numeros.length);  // 5
  • push(...elementos): Añade uno o más elementos al final del array.
numeros.push(6);
console.log(numeros);  // [1, 2, 3, 4, 5, 6]
  • pop(): Elimina y devuelve el último elemento del array.
let ultimo: number = numeros.pop();
console.log(ultimo);  // 6
console.log(numeros);  // [1, 2, 3, 4, 5]
  • unshift(...elementos): Añade uno o más elementos al inicio del array.
numeros.unshift(0);
console.log(numeros);  // [0, 1, 2, 3, 4, 5]
  • shift(): Elimina y devuelve el primer elemento del array.
let primero: number = numeros.shift();
console.log(primero);  // 0
console.log(numeros);  // [1, 2, 3, 4, 5]
  • slice(inicio, fin?): Devuelve una copia superficial de una porción del array.
let subArray: number[] = numeros.slice(1, 3);
console.log(subArray);  // [2, 3]
  • splice(inicio, numElementos, ...elementos?): Añade o elimina elementos del array.
numeros.splice(2, 1, 99);
console.log(numeros);  // [1, 2, 99, 4, 5]
  • concat(...arrays): Combina dos o más arrays.
let otrosNumeros: number[] = [6, 7, 8];
let combinados: number[] = numeros.concat(otrosNumeros);
console.log(combinados);  // [1, 2, 99, 4, 5, 6, 7, 8]
  • forEach(callback): Ejecuta una función por cada elemento del array.
numeros.forEach((num) => console.log(num));
// 1
// 2
// 99
// 4
// 5
  • map(callback): Crea un nuevo array con los resultados de la llamada a una función aplicada a cada elemento.
let cuadrados: number[] = numeros.map((num) => num * num);
console.log(cuadrados);  // [1, 4, 9801, 16, 25]
  • filter(callback): Crea un nuevo array con todos los elementos que pasan una prueba.
let mayoresQueTres: number[] = numeros.filter((num) => num > 3);
console.log(mayoresQueTres);  // [99, 4, 5]
  • reduce(callback, valorInicial?): Aplica una función a un acumulador y cada valor del array (de izquierda a derecha) para reducirlo a un solo valor.
let suma: number = numeros.reduce((acumulador, num) => acumulador + num, 0);
console.log(suma);  // 111

Ejemplos Prácticos

Encontrar Elementos Duplicados

function encontrarDuplicados(arr: number[]): number[] {
    let duplicados: number[] = [];
    let contador: { [key: number]: number } = {};

    arr.forEach((num) => {
        contador[num] = (contador[num] || 0) + 1;
    });

    for (let num in contador) {
        if (contador[num] > 1) {
            duplicados.push(Number(num));
        }
    }

    return duplicados;
}

let numeros: number[] = [1, 2, 3, 4, 5, 2, 3, 4];
console.log(encontrarDuplicados(numeros));  // [2, 3, 4]

Ordenar un Array de Objetos

interface Persona {
    nombre: string;
    edad: number;
}

let personas: Persona[] = [
    { nombre: "Juan", edad: 25 },
    { nombre: "Ana", edad: 22 },
    { nombre: "Luis", edad: 30 }
];

personas.sort((a, b) => a.edad - b.edad);
console.log(personas);
// [
//     { nombre: "Ana", edad: 22 },
//     { nombre: "Juan", edad: 25 },
//     { nombre: "Luis", edad: 30 }
// ]