Todo sobre los arrays
Los arrays o arreglos son objetos en Javascript que nos permiten almacenar una colección de datos. Cada dato almacenado en un array tiene un índice que nos permite acceder a él. Al ser objetos, los arrays tienen propiedades y métodos.
Crear un array
Para crear un array en Javascript podemos usar una de las dos maneras que existen:
- Usando el constructor
Array()
y la palabra clavenew
- Usando la notación literal de arrays
[]
Usando el constructor Array()
y la palabra clave new
const frutas = new Array("Manzana", "Plátano", "Cereza");
Usando la notación literal de arrays []
const frutas = ["Manzana", "Plátano", "Cereza"];
Acceder a un elemento de un array
Para acceder a un elemento de un array podemos usar la notación de corchetes []
y el índice del elemento que queremos acceder:
const frutas = ["Manzana", "Plátano", "Cereza"];
console.log(frutas[0]); // Manzana
console.log(frutas[1]); // Plátano
console.log(frutas[2]); // Cereza
Operaciones sobre un array
Agregar elementos a un array
Para agregar elementos a un array podemos usar el método push()
:
const frutas = ["Manzana", "Plátano", "Cereza"];
frutas.push("Fresa");
console.log(frutas); // ["Manzana", "Plátano", "Cereza", "Fresa"]
Eliminar elementos de un array
Para eliminar elementos de un array podemos usar el método pop()
:
const frutas = ["Manzana", "Plátano", "Cereza"];
frutas.pop();
console.log(frutas); // ["Manzana", "Plátano"]
Obtener el tamaño de un array
Para obtener el tamaño de un array podemos usar la propiedad length
:
const frutas = ["Manzana", "Plátano", "Cereza"];
console.log(frutas.length); // 3
Iterar sobre un array
Para iterar sobre un array podemos usar el método forEach()
:
const frutas = ["Manzana", "Plátano", "Cereza"];
frutas.forEach((fruta) => {
console.log(fruta);
});
Métodos de los arrays
Los arrays tienen muchos métodos que nos permiten manipularlos. Algunos de los más comunes son:
push()
: Agrega un elemento al final del arraypop()
: Elimina el último elemento del arrayunshift()
: Agrega un elemento al inicio del arrayshift()
: Elimina el primer elemento del arrayindexOf()
: Devuelve el índice del elemento que le pasemos como parámetrojoin()
: Une todos los elementos de un array en un stringslice()
: Extrae elementos de un array y devuelve un nuevo arraysplice()
: Elimina elementos de un array y devuelve un nuevo arrayreverse()
: Invierte el orden de los elementos de un arraysort()
: Ordena los elementos de un arraymap()
: Crea un nuevo array con los resultados de la llamada a una función para cada elemento del arrayfilter()
: Crea un nuevo array con todos los elementos que cumplan la condición implementada por la función dadareduce()
: Aplica una función a un acumulador y a cada valor de un array (de izquierda a derecha) para reducirlo a un único valorfind()
: Devuelve el primer elemento de un array que cumpla con la condición implementada por la función dada
Antes de revisar cada uno de estos métodos hablemos sobre la mutabilidad en Javascript.
Mutabilidad en Javascript
La mutabilidad hace referencia a la capacidad de cambiar el estado de un objeto. En Javascript todos los tipos de datos de referencia son mutables, es decir, podemos cambiar su estado. Por ejemplo, podemos agregar elementos a un array:
const frutas = ["Manzana", "Plátano", "Cereza"];
frutas.push("Fresa");
console.log(frutas); // ["Manzana", "Plátano", "Cereza", "Fresa"]
En este caso, el array frutas
es un objeto que tiene una propiedad length
que nos indica el tamaño del array. Cuando usamos el método push()
para agregar un elemento al array, el array frutas
cambia su estado y su propiedad length
pasa a tener el valor 4
.
La mutabilidad puede causar efectos secundarios en nuestra aplicación, por ejemplo, si tenemos varias funciones que actuan sobre un mismo tipo de dato y más adelante en nuestra aplicaición agregamos otra función, es muy probable que aparezcan errores en nuestra aplicación. Para evitar estos efectos secundarios podemos usar inmutabilidad.
Ahora sí, veamos los métodos que probablemente usaremos más a menudo como desarrolladores backend.
splice()
Este método nos permite eliminar elementos de un array y devolver un nuevo array. Este método modifica el array original. Recibe dos parámetros: el índice de inicio y el número de elementos a eliminar. El índice de inicio es obligatorio y el número de elementos a eliminar es opcional. Si no se pasa el número de elementos a eliminar, el método elimina todos los elementos desde el índice de inicio hasta el final del array.
// Creamos un array de frutas
const frutas = ["Manzana", "Plátano", "Cereza", "Fresa", "Naranja"];
// Usamos el método splice() para eliminar los elementos desde el índice 1 hasta el 3
const frutasSeleccionadas = frutas.splice(1, 3);
console.log(frutasSeleccionadas); // ["Plátano", "Cereza", "Fresa"]
// Arreglo original
console.log(frutas); // ["Manzana", "Naranja"]
concat()
Este método nos permite unir dos o más arrays y devolver un nuevo array. Este método no modifica el array original.
// Creamos un array de frutas
const frutas = ["Manzana", "Plátano", "Cereza", "Fresa", "Naranja"];
// Creamos un array de verduras
const verduras = ["Lechuga", "Zanahoria", "Cebolla", "Ajo", "Papa"];
// Usamos el método concat() para unir los dos arrays
const alimentos = frutas.concat(verduras);
console.log(alimentos); // ["Manzana", "Plátano", "Cereza", "Fresa", "Naranja", "Lechuga", "Zanahoria", "Cebolla", "Ajo", "Papa"]
// Arreglo original
console.log(frutas); // ["Manzana", "Plátano", "Cereza", "Fresa", "Naranja"]
console.log(verduras); // ["Lechuga", "Zanahoria", "Cebolla", "Ajo", "Papa"]
Este método también es útil para poder agregar nuevos elementos a un array sin modificar el array original:
// Creamos un array de frutas
const frutas = ["Manzana", "Plátano", "Cereza", "Fresa", "Naranja"];
// Agregamos una nueva fruta con .concat()
const nuevasFrutas = frutas.concat("Papaya", "Sandía");
console.log(nuevasFrutas) // ["Manzana", "Plátano", "Cereza", "Fresa", "Naranja", "Papaya", "Sandía"]
// Arreglo original
console.log(frutas); // ["Manzana", "Plátano", "Cereza", "Fresa", "Naranja"]
slice()
Este método nos permite extraer elementos de un array y devolver un nuevo array. Este método no modifica el array original. Recibe dos parámetros: el índice de inicio y el índice de fin. El índice de inicio es obligatorio y el índice de fin es opcional. Si no se pasa el índice de fin, el método extrae todos los elementos desde el índice de inicio hasta el final del array.
// Creamos un array de frutas
const frutas = ["Manzana", "Plátano", "Cereza", "Fresa", "Naranja"];
// Usamos el método slice() para extraer los elementos desde el índice 1 hasta el 3
const frutasSeleccionadas = frutas.slice(1, 3);
console.log(frutasSeleccionadas); // ["Plátano", "Cereza"]
// Arreglo original
console.log(frutas); // ["Manzana", "Plátano", "Cereza", "Fresa", "Naranja"]
map()
Este método nos permite recorrer todo el array y ejecutar un bloque de código por cada elemento del array. El método map()
devuelve un nuevo array con los resultados de la ejecución del bloque de código por cada elemento del array.
// Creamos un array de números
const numeros = [1, 2, 3, 4, 5];
// Usamos el método map() para recorrer el array y multiplicar cada elemento por 2
const numerosPorDos = numeros.map((numero) => numero * 2);
console.log(numerosPorDos); // [2, 4, 6, 8, 10]
// Arreglo original
console.log(numeros); // [1, 2, 3, 4, 5]
// Vemos que este método no ha modificado el array original, por lo que podemos
// decir que este método es inmutable
filter()
Este método nos permite filtrar los elementos de un array que cumplan con una condición. El método filter()
devuelve un nuevo array con los elementos que cumplan dicha condición.
// Creamos un array de números
const numeros = [1, 2, 3, 4, 5];
// Usamos el método filter() para filtrar los números pares
const numerosPares = numeros.filter((numero) => numero % 2 === 0);
console.log(numerosPares); // [2, 4]
// Arreglo original
console.log(numeros); // [1, 2, 3, 4, 5]
// Vemos que este método no ha modificado el array original, por lo que podemos
// decir que este método también es inmutable
reduce()
Este método nos permite reducir un array a un único valor. El método reduce()
recibe una función que recibe dos parámetros: el acumulador y el valor actual. La función reduce()
ejecuta la función que le pasamos por cada elemento del array y el resultado de la ejecución de la función se almacena en el acumulador. Al finalizar la ejecución de la función reduce()
devuelve el valor del acumulador.
// Creamos un array de números
const numeros = [1, 2, 3, 4, 5];
// Usamos el método reduce() para sumar todos los elementos del array
const suma = numeros.reduce((acumulador, numero) => acumulador + numero, 0);
console.log(suma); // 15
// Arreglo original
console.log(numeros); // [1, 2, 3, 4, 5]
find()
Este método nos permite encontrar el primer elemento de un array que cumpla con una condición. El método find()
devuelve el primer elemento que cumpla con la condición.
// Creamos un array de números
const numeros = [1, 2, 3, 4, 5];
// Usamos el método find() para encontrar el primer número par
const numeroPar = numeros.find((numero) => numero % 2 === 0);
console.log(numeroPar); // 2
// Arreglo original
console.log(numeros); // [1, 2, 3, 4, 5]