El Operador Spread (...) en Arreglos
Desestructuración de Arreglos en JavaScript
🎁 Desempacando Valores
Tradicionalmente, para obtener valores de un arreglo y guardarlos en variables, haríamos algo así:
let punto = [10, 20, 30];
let x = punto[0];let y = punto[1];let z = punto[2];
console.log(x, y, z); // Muestra 10 20 30
La desestructuración de arreglos nos ofrece una sintaxis mucho más limpia para lograr lo mismo:
let puntoCoords = [10, 20, 30];
// Desestructuraciónlet [coordX, coordY, coordZ] = puntoCoords;
console.log(coordX, coordY, coordZ); // Muestra 10 20 30
Usamos corchetes []
en el lado izquierdo de la asignación (let
, const
, var
) y colocamos los nombres de las variables que queremos crear. JavaScript asignará los elementos del arreglo puntoCoords
a estas variables en orden.
✨ Características Clave
1. Declaración y Asignación Separadas
Podemos declarar las variables primero y luego desestructurar (aunque es menos común):
let nombre, apellido;let persona = ["Ana", "García"];
[nombre, apellido] = persona;
console.log(nombre); // Muestra "Ana"console.log(apellido); // Muestra "García"
2. Saltar Elementos
Si no necesitamos un elemento intermedio, podemos simplemente omitir su nombre usando una coma ,
como marcador de posición:
let colores = ["Rojo", "Verde", "Azul", "Amarillo"];
let [primerColor, , tercerColor] = colores; // Saltamos el segundo color ("Verde")
console.log(primerColor); // Muestra "Rojo"console.log(tercerColor); // Muestra "Azul"
3. Valores por Defecto
Podemos asignar un valor por defecto a una variable en caso de que el elemento correspondiente en el arreglo no exista (sea undefined
).
let configuracion = ["Modo Oscuro"];
let [tema = "Modo Claro", fontSize = 16] = configuracion;
console.log(tema); // Muestra "Modo Oscuro" (valor del arreglo)console.log(fontSize); // Muestra 16 (valor por defecto, no había elemento en índice 1)
let otraConfig = [undefined, 12];let [otroTema = "Claro", otroSize = 16] = otraConfig;
console.log(otroTema); // Muestra "Claro" (el elemento era undefined, se usa el defecto)console.log(otroSize); // Muestra 12 (valor del arreglo)
💡 Los valores por defecto solo se usan si el elemento del arreglo es
undefined
o si no existe.
4. El Parámetro Rest (...
)
Podemos usar el operador rest (...
) al final de la desestructuración para agrupar todos los elementos restantes del arreglo en una nueva variable (que será un arreglo).
let numeros = [1, 2, 3, 4, 5, 6];
let [primero, segundo, ...restoDeNumeros] = numeros;
console.log(primero); // Muestra 1console.log(segundo); // Muestra 2console.log(restoDeNumeros); // Muestra [3, 4, 5, 6]
Esto es muy útil para separar el inicio de un arreglo del resto.
⚠️ El parámetro rest (...
) solo puede usarse como el último elemento en
la desestructuración del arreglo.
5. Intercambiar Variables
La desestructuración ofrece una forma muy elegante de intercambiar los valores de dos variables sin necesidad de una variable temporal:
let a = 5;let b = 10;
[a, b] = [b, a]; // ¡Magia!
console.log(a); // Muestra 10console.log(b); // Muestra 5
6. Desestructuración Anidada
Podemos desestructurar arreglos que están dentro de otros arreglos:
let datosAnidados = ["Usuario1", ["Admin", "Editor"]];
let [usuario, [rol1, rol2]] = datosAnidados;
console.log(usuario); // Muestra "Usuario1"console.log(rol1); // Muestra "Admin"console.log(rol2); // Muestra "Editor"
☝️🤓
🏋️♂️ Ejercicio
Dado el arreglo: let coche = ["Toyota", "Corolla", 2022, "Rojo"];
Usa la desestructuración para extraer:
- La marca en una variable
marca
. - El modelo en una variable
modelo
. - El año en una variable
año
. - El color en una variable
color
.
Muestra todas las variables por consola.
🏋️♂️ Ejercicio
Dado el arreglo: let competidores = ["Ana", "Luis", "Eva", "Juan", "Sara"];
Usa la desestructuración para:
- Extraer los tres primeros competidores en variables
oro
,plata
,bronce
. - Extraer el resto de los competidores en un arreglo llamado
otrosCompetidores
. - Asigna un valor por defecto de
"Nadie"
abronce
por si acaso solo hubiera 2 competidores.
Muestra todas las variables (oro
, plata
, bronce
, otrosCompetidores
) por consola.
🚀 Extra
Investiga sobre: 1. ¿Cómo funciona la desestructuración con los resultados de
funciones que devuelven arreglos (ej. string.match()
, Object.entries()
)?
2. ¿Puedes usar la desestructuración de arreglos en los parámetros de una
función? 3. Compara la desestructuración de arreglos con la desestructuración
de objetos. ¿Cuáles son sus similitudes y diferencias?