preloader

Desestructuración de Asignación en JavaScript

Desestructuración de Asignación en JavaScript

En JavaScript, las estructuras de datos más utilizadas son los objetos y los arrays. Los objetos nos permiten agrupar elementos con claves únicas, mientras que los arrays nos permiten organizar elementos en una lista ordenada. Sin embargo, al pasar estos datos a una función, podríamos no querer el objeto o el array completo, sino solo algunos elementos.

La desestructuración de asignación es una sintaxis especial que nos permite «desempaquetar» arrays u objetos en múltiples variables individuales, lo que a menudo resulta más conveniente.

Este tipo de desestructuración es particularmente útil en funciones complejas con muchos parámetros, valores predeterminados, y más. Vamos a ver cómo funciona con algunos ejemplos.

Desestructuración de Arrays

Un ejemplo simple de cómo un array puede ser desestructurado en variables es el siguiente:

				
					// Tenemos un array con nombre y apellido
let arr = ["Juan", "Pérez"];

// Desestructuración de asignación
// Asigna firstName = arr[0]
// y lastName = arr[1]
let [firstName, lastName] = arr;

console.log(firstName); // Juan
console.log(lastName);  // Pérez

				
			

Ahora podemos trabajar con variables en lugar de acceder directamente a los elementos del array. Esta técnica también es útil cuando usamos métodos como split que devuelven arrays:

				
					let [firstName, lastName] = "Juan Pérez".split(' ');
console.log(firstName); // Juan
console.log(lastName);  // Pérez

				
			

Aunque parece simple, hay algunos detalles importantes que deben considerarse. Vamos a explorar más ejemplos para comprender mejor esta técnica.

La desestructuración no modifica el array original

La desestructuración se llama así porque copia elementos en nuevas variables, pero no modifica el array original. Es solo una manera más simple de escribir:

				
					let firstName = arr[0];
let lastName = arr[1];

				
			

Ignorar elementos usando comas

Podemos omitir elementos no deseados en un array usando comas adicionales:

				
					// El segundo elemento no es necesario
let [firstName, , title] = ["Julio", "César", "Cónsul", "de la República Romana"];
console.log(title); // Cónsul

				
			

n el ejemplo anterior, el segundo elemento del array es ignorado, y el tercero se asigna a title.

Funciona con cualquier iterable

La desestructuración no se limita solo a arrays; también funciona con cualquier iterable:

				
					let [a, b, c] = "abc"; // ["a", "b", "c"]
let [uno, dos, tres] = new Set([1, 2, 3]);

				
			

Internamente, la desestructuración utiliza un bucle for..of para iterar sobre el valor a la derecha del = y asignar esos valores.

Asignar a cualquier cosa en el lado izquierdo

Podemos usar cualquier cosa que sea «asignable» en el lado izquierdo de la desestructuración. Por ejemplo, propiedades de un objeto:

				
					let user = {};
[user.nombre, user.apellido] = "Juan Pérez".split(' ');
console.log(user.nombre); // Juan
console.log(user.apellido); // Pérez

				
			

Bucle con .entries()

Podemos usar la desestructuración con Object.entries para iterar sobre claves y valores de un objeto:

				
					let user = {
  nombre: "Juan",
  edad: 30
};

// Iterar sobre claves y valores
for (let [key, value] of Object.entries(user)) {
  console.log(`${key}: ${value}`); // nombre: Juan, luego edad: 30
}

				
			

Intercambio de variables

Un truco conocido para intercambiar los valores de dos variables usando desestructuración es:

				
					let guest = "Ana";
let admin = "Pedro";

// Intercambio de valores
[guest, admin] = [admin, guest];

console.log(`${guest} ${admin}`); // Pedro Ana (intercambiados)

				
			

El operador ... para el resto

Si queremos obtener los elementos restantes de un array, podemos usar el operador ...:

				
					let [name1, name2, ...rest] = ["Julio", "César", "Cónsul", "de la República Romana"];

console.log(rest[0]); // Cónsul
console.log(rest[1]); // de la República Romana
console.log(rest.length); // 2

				
			

El valor de rest es un array con los elementos restantes del array original.

Valores predeterminados

Si el array es más corto que la lista de variables, los valores faltantes son undefined. Podemos establecer valores predeterminados utilizando =:

				
					let [firstName = "Invitado", surname = "Anónimo"] = ["Julio"];
console.log(firstName); // Julio
console.log(surname); // Anónimo

				
			

Desestructuración de Objetos

La desestructuración de objetos sigue una sintaxis similar:

				
					let options = {
  title: "Menú",
  width: 100,
  height: 200
};

let { title, width, height } = options;
console.log(title);  // Menú
console.log(width);  // 100
console.log(height); // 200

				
			

Cambiar nombres de variables

Podemos asignar propiedades a variables con nombres diferentes usando ::

				
					let options = {
  title: "Menú",
  width: 100,
  height: 200
};

// { propiedadOrigen: variableObjetivo }
let { width: w, height: h, title } = options;
console.log(title);  // Menú
console.log(w);      // 100
console.log(h);      // 200

				
			

Valores predeterminados en objetos

Podemos establecer valores predeterminados para propiedades que podrían faltar:

				
					let options = {
  title: "Menú"
};

let { width = 100, height = 200, title } = options;
console.log(title);  // Menú
console.log(width);  // 100
console.log(height); // 200

				
			

El operador ... para el resto en objetos

Podemos usar el operador ... para obtener el resto de las propiedades de un objeto:

				
					let options = {
  size: {
    width: 100,
    height: 200
  },
  items: ["Pastel", "Donut"],
  extra: true
};

let {
  size: { width, height },
  items: [item1, item2],
  title = "Menú"
} = options;

console.log(title);  // Menú
console.log(width);  // 100
console.log(height); // 200
console.log(item1);  // Pastel
console.log(item2);  // Donut

				
			

Argumentos de función inteligentes

Para funciones con muchos argumentos, podemos usar desestructuración para simplificar:

				
					let options = {
  title: "Mi menú",
  items: ["Elemento1", "Elemento2"]
};

function showMenu({ title = "Sin título", width = 200, height = 100, items = [] }) {
  console.log(`${title} ${width} ${height}`); // Mi menú 200 100
  console.log(items); // Elemento1, Elemento2
}

showMenu(options);

				
			

Podemos también usar desestructuración más compleja:

				
					let options = {
  title: "Mi menú",
  items: ["Elemento1", "Elemento2"]
};

function showMenu({
  title = "Sin título",
  width: w = 100,
  height: h = 200,
  items: [item1, item2]
}) {
  console.log(`${title} ${w} ${h}`); // Mi menú 100 200
  console.log(item1); // Elemento1
  console.log(item2); // Elemento2
}

showMenu(options);

				
			

Para proporcionar un objeto vacío como valor predeterminado para todo el objeto de argumentos:

				
					function showMenu({ title = "Menú", width = 100, height = 200 } = {}) {
  console.log(`${title} ${width} ${height}`);
}

showMenu(); // Menú 100 200

				
			

Resumen

La asignación desestructurante permite mapear un objeto o array en múltiples variables de manera sencilla.

La sintaxis completa para objetos es:

				
					let { prop: varName = default, ...rest } = objeto;

				
			

Para arrays:

				
					let [item1 = default, item2, ...rest] = array;

				
			

Esta técnica es útil para trabajar con datos anidados y para manejar múltiples argumentos en funciones de manera clara y eficiente.

Related Post

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *