Aitor Sánchez - Blog - Oct. 26, 2023, 10:26 a.m.
¿Quieres utilizar arrays/arreglos en TypeScript y no sabes por donde empezar? O, quizás, lo que estás buscando es información sobre características o funciones disponible para tratar con los datos de su interior. ¿verdad?
Mi nombre es Aitor Sánchez, hago apps desde 2014, y en este artículo te enseñaré a crear, a enteder y, en definitiva, a cómo utilizar un array en tus proyectos TypeScript de una manera fácil, comprensible y totalmente accionable.
Pero antes de continuar, esta es la Flutter Mafia. Es mi newsletter donde aprenderás desarrollo de apps móviles, aso y monetización junto con otros genietes que ya están dentro. Y si te suscribes te regalo mi ebook "Duplica los ingreso de tus apps en 5 minutos" No es broma, quizás te interese.
Aquí tienes el artículo resumido en video. Quizás te guste más ver que leer :P
Para definir un Array en TypeScript, lo único que tienes que hacer es usar los corchetes "[]" al final de la definición del tipo de variable que va a contener:
let heroes: string[];
Cómo hemos visto en el ejemplo del video, vamos a usar un array de algunos héroes de Marvel antes de continuar.
let heroes: string[] = [
"Iron Man",
"Spiderman",
"Thor",
"Hulk",
"Black Widow",
"Hawk Eye"
];
Cómo puedes intuir, dentro de esta arrays puedes almacenar colecciones de cualquier tipo de dato ya sea primitivo o por referencia. En el mismo ejemplo, hemos usado cadenas de texto. Ahora hagamos una de primitivos:
let numbers: number[] = [1,2,3,4,5];
Otra manera más de definirlas
También puedes definir un array utilizando el constructor de la clase Array de la siguiente manera:
let listaDeNumeros: Array<number> = [1,2,3,4,5];
Y tendría, exáctamente, la misma utilidad que las anteriores.
La inferencia del tipo en un array se trata de, al igual que en las variables normales, delegar en TypeScript la elección del tipo de dato para el contenido que vas a meter dentro de la colección.
const heroes = ["spiderman", "batman", "wonderwoman"]
heroes.push("superman") //Esto funcionaría bien.
heroes.push(100) //Error: Argument of type "string" is not assignable to parameter of type "number".
let first: string = heroes[0]; //Esto funcionaría bien.
Cómo ves, al intentar meter un número en un array que el propio TypeScript ha inferido cómo string, nos da error.
Cuando vas poniendo items dentro de un arreglo, el mismo sistema va asignando un índice a cada uno de ellos. Dicho índice se incrementa con cada uno más que agregas, y disminuye con cada uno que quitas (esto lo vamos a ver a continuación).
Para acceder a un elemento en concreto, debes de conocer su índice dentro de dicha colección.
Para acceder a él lo haremos de la siguiente manera:
let segundoHeroe: string = heroes[2]; //Donde dos es el índice del array al que queremos acceder.
Para más ejemplo, vas a acceder a uno de estos índices y lo vamos a mostrar por la consola de desarrollo:
console.log(heroes[2]); //Imprimiría Spìderman
console.log(segundoHeroe); //Este también imprimiría Spiderman
Al tratarse de variables contenidas dentro de una variable más grande, o colección, por supuesto que se puede modificar.
Para ello solo tendrías que hacer lo siguiente:
//Esto modificará su contenido.
heroes[2] = "Peter Parker";
console.log(heroes[2]); //Ahora imprimirá Peter Parker
Es muy sencillo. Cabe decir que, si es un array que almacena strings no puedes meter un number dentro. Vamos, que no puedes cambiar el tipo de dato, pero si el valor de este.
Por otro lado, puedes prevenir que el array sea editado después de haber sido creado e inicializado. Evitando así problemas futuros en la estructura del programa por modificaciones indebidas.
Para hacer esto, de manera explícita, tienes que agregarle el atributo "readonly" en la definición del tipo de dato que va a contener el array así:
const names: readonly string[] = ["Aitor"];
names.push("Jesús"); //Error: Property "push" does not exist on type "readonly string[]".
// Try removing the readonly modifier and see if it works?
Esta seguramente sea la pregunta que más se pase por tu cabeza. Lo sé porque a mí me pasó. ¿Puedo agregar elementos a un array después de haberla definido? Pues claro, faltaría más.
Para tal fin, vas a hacer uso de dos funciones de las que disponen las variables de tipo array. Es posible que aún no sepas lo que son las funciones, porque aún no lo he explicado en el diccionario del programado, pero fíate de mí que se hace así. Más adelante veremos lo que son.
//Agregamos un elemento al final del array:
heroes.push("Scarlet Witch");
//Eliminamos el último elemento del array:
heroes.pop();
Cómo has visto en el ejemplo, usamos las funciones “pop” y “push”:
Hay más métodos para agregar y quitar elementos, pero de momento nos vamos a quedar con estos dos, que son los principales que tienes que conocer cuando trabajas con arrays.
Esto es muy útil cuando, por ejemplo, vas a recorrerla con un bucle para imprimir en consola el nombre de los héroes que hemos visto en el video.
console.log(heroes.length); //Imprimirá cuantas cadenas de texto que hay dentro del array
Aunque es posible que no entiendas el código, o quizás sí, lo que me importa de lo que has visto es la llamada a la propiedad “length”. Esta propiedad es la que va a contener dicho número que tiene el valor de la cantidad de objetos que hay dentro del array.
Nota: Es importante que sepas que, dependiendo del lenguaje, dicha propiedad “length” también podría ser una función. O, más diferente aún, podría llamarse “size”.
Los arreglos/arrays, cómo cualquier otro objeto, dispone de funciones/métodos que puedes utilizar para manipular los datos que contienen. Vamos a pasar a verlos y a explicarte cada uno de ellos a nivel informativo. Vamos:
var alpha = ["a", "b", "c"];
var numeric = [1, 2, 3];
var alphaNumeric = alpha.concat(numeric);
console.log("alphaNumeric : " + alphaNumeric );
//ouput: alphaNumeric : a,b,c,1,2,3
function isBigEnough(element, index, array) {
return (element >= 10);
}
var passed = [12, 5, 8, 130, 44].every(isBigEnough);
console.log("Test Value : " + passed );
//Ouput: Test Value : false
function isBigEnough(element, index, array) {
return (element >= 10);
}
var passed = [12, 5, 8, 130, 44].filter(isBigEnough);
console.log("Test Value : " + passed );
//Ouput: Test Value :12,130,44
let num = [7, 8, 9];
num.forEach(function (value) {
console.log(value);
});
//Ouput:
//7
//8
//9
var index = [12, 5, 8, 130, 44].indexOf(8);
console.log("index is : " + index );
//Ouput: index is : 2
var arr = new Array("First","Second","Third");
var str = arr.join();
console.log("str : " + str );
var str = arr.join(", ");
console.log("str : " + str );
var str = arr.join(" + ");
console.log("str : " + str );
//Ouput:
//str : First,Second,Third
//str : First, Second, Third
//str : First + Second + Third
var index = [4, 12, 5, 8, 130, 44].lastIndexOf(8);
console.log("index is : " + index );
//Ouput: index is : 2
var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
console.log("roots is : " + roots );
//Ouput: roots is : 1,2,3
var numbers = [1, 4, 9];
var element = numbers.pop();
console.log("element is : " + element );
var element = numbers.pop();
console.log("element is : " + element );
//Ouput:
//element is : 9
//element is : 4
var numbers = new Array(1, 4, 9);
var length = numbers.push(10);
console.log("new numbers is : " + numbers );
length = numbers.push(20);
console.log("new numbers is : " + numbers );
//Ouput:
//new numbers is : 1,4,9,10
//new numbers is : 1,4,9,10,20
var total = [0, 1, 2, 3].reduce(function(a, b){ return a + b; });
console.log("total is : " + total );
//Ouput: total is : 6
var total = [0, 1, 2, 4].reduceRight(function(a, b){ return a + b; });
console.log("total is : " + total );
//Ouput: total is : 7
var arr = [0, 1, 2, 3].reverse();
console.log("Reversed array is : " + arr );
//Ouput: Reversed array is : 3,2,1,0
var arr = [10, 1, 2, 3].shift();
console.log("Shifted value is : " + arr );
//Ouput: Shifted value is : 10
var arr = ["orange", "mango", "banana", "sugar", "tea"];
console.log("arr.slice( 1, 2) : " + arr.slice( 1, 2) );
console.log("arr.slice( 1, 3) : " + arr.slice( 1, 3) );
//Ouput:
//arr.slice( 1, 2) : mango
//arr.slice( 1, 3) : mango,banana
function isBigEnough(element, index, array) {
return (element >= 10);
}
var retval = [2, 5, 8, 1, 4].some(isBigEnough);
console.log("Returned value is : " + retval );
var retval = [12, 5, 8, 1, 4].some(isBigEnough);
console.log("Returned value is : " + retval );
//Ouput:
//Returned value is : false
//Returned value is : true
var arr = new Array("orange", "mango", "banana", "sugar");
var sorted = arr.sort();
console.log("Returned string is : " + sorted );
//Ouput: Returned string is : banana,mango,orange,sugar
var arr = ["orange", "mango", "banana", "sugar", "tea"];
var removed = arr.splice(2, 0, "water");
console.log("After adding 1: " + arr );
console.log("removed is: " + removed);
removed = arr.splice(3, 1);
console.log("After removing 1: " + arr );
console.log("removed is: " + removed);
//Ouput:
//After adding 1: orange,mango,water,banana,sugar,tea
//removed is:
//After removing 1: orange,mango,water,sugar,tea
//removed is: banana
var arr = new Array("orange", "mango", "banana", "sugar");
var str = arr.toString();
console.log("Returned string is : " + str );
//Ouput: Returned string is : orange,mango,banana,sugar
var arr = new Array("orange", "mango", "banana", "sugar");
var length = arr.unshift("water");
console.log("Returned array is : " + arr );
console.log("Length of the array is : " + length );
//Ouput:
//Returned array is : water,orange,mango,banana,sugar
//Length of the array is : 5
Mira, en el momento que tu mejoras el logo de una app que tengas publicada en Google Play, las descargas y los ingresos que esta aplicación genera aumentan. Esto es así. Mejor logo es igual a más dinero.
Basándonos en esto, hemos creado esta herramienta que te permite evaluar, optimizar y mejorar los logos de tus apps para que reciban más descargas. No te quiero espoilear, dentro hay un video explicativo. Entra en el enlace.
Y ahora si, me despido ya. Espero haberte ayudado y nos vemos en el siguiente artículo. Hasta entonces ¡que te vaya bien!