Saltar al contenido
Portada » Desestructuración en Javascript

Desestructuración en Javascript

La desestructuración en Javascript (destructuring) es una sintaxis especial que permite desempaquetar arreglos (arrays) u objetos en un conjunto de variables.

Las estructuras de datos más usadas en Javascript son Object y Array. Los objetos permiten crear una entidad única que almacena cada elemento por clave. Los arreglos o arrays nos permiten agrupar elementos en una lista ordenada.

La desestructuración en Javascript funciona muy bien por ejemplo cuando trabajas con funciones complejas que reciben muchos parámetros.

Desestructurando Arrays

Aquí vemos un ejemplo básico:

// array con nombre y apellido
let persona = ["Pedro", "Martinez"]

// desestructurando
// establece nombre = arr[0]
// y apellidos = arr[1]
let [nombre, apellido] = persona;

alert(nombre); // Pedro
alert(apellido);  // Martinez

A partir de ese punto podemos trabajar directamente con variables en vez de elementos de arreglos. Un punto importante a entender es que el array no se ve modificado, puede seguir trabajándose con el sin problema.

Combinación con métodos que devuelven arrays

Se puede combinar con split() o cualquier otro método que devuelve arrays.

let [nombre, apellido] = "Pedro Martinez".split(' ');
alert(nombre); // Pedro
alert(apellido);  // Martinez

Ignorar elementos

Pueden ignorarse elementos usando comas. En el siguiente ejemplo vemos como se ignora el segundo elemento y el cuarto.

// el segundo elemento no se necesita
let [primera, , tercera] = ["Vamos", "de", "paseo", "con un coche nuevo"];

alert( tercera); // paseo

Desestructurando objetos

La sintaxis básica es la siguiente:

let {var1, var2} = {var1:…, var2:…}

Deberíamos tener un objeto existente en el lado derecho, que queremos partir en variables. La parte izquierda contiene un patrón para las correspondientes propiedades. El caso más simple sería el siguiente:

let persona = {
  nombre: "Antonio",
  apellido: "Martinez",
  edad: 20
};

let {nombre, apellido, edad} = persona;

alert(nombre);  // Antonio
alert(apellido);  // Martinez
alert(edad); // 20

El orden en el que figuren las variables da igual, podrían reordenarse de la siguiente forma:

let {edad, nombre, apellido} = persona; // 20, Martinez, Antonio

El patrón en el lado izquierdo puede ser más complejo y especificar el mapeo entre propiedades y variables. Si queremos asignar una propiedad a una variable con otro nombre podemos hacerlo de la siguiente forma:

let persona = {
  nombre: "Pedro",
  apellido: "Martinez",
  edad: 20
};

let {apellido: a, edad: e, nombre} = persona;


alert(nombre);  // Pedro
alert(e);      // 20
alert(a);      // Martinez

También pueden usarse valores por defecto en las variables de la siguiente forma:

let persona= {
  nombre: "Pedro"
};

let {apellido= "Martinez", edad = 20, nombre} = persona;

alert(nombre);  // Pedro
alert(apellido);  // Martinez
alert(edad); // 20

El patrón resto “…”

¿Qué ocurre si un objeto tiene más propiedades que variables tenemos?. ¿Puede asignarse el “resto” a otra cosa?. Esta funcionalidad no esta soportada en navegadores antiguos, pero todos los modernos la soportan.

let persona = {
  nombre: "Pedro",
  apellido: "Martinez",
  edad: 20
};


let {nombre, ...rest} = options;

alert(rest.apellido);  // Martinez
alert(rest.edad);   // 20

Desestructuración anidada

Si un array u objeto contiene otros arrays u objetos anidados podemos usar patrones más complejos en la parte izquierda para extraer cada porción.

let elementos = {
  tamanyo: {
    ancho: 100,
    alto: 200
  },
  arrayColores: ["Azul", "Verde"],
  otro: true
};


let {
  tamanyo: { 
    ancho,
    alto
  },
  arrayColores: [color1, color2], // assign items here
  nombre = "Paco" 
} = elementos;

alert(nombre);  // Paco
alert(ancho);  // 100
alert(alto); // 200
alert(color1);  // Azul
alert(color2);  // Verde

Recursos básicos

PrototypeAñadir propiedades de forma dinámica a un objeto
toLocaleStringHerramienta esencial para el formateo de fechas y números en aplicaciones internacionales
Recursividad y pilaUso de recursividad y funcionamiento de la pila JS
DesestructuraciónMecanismo para desempaquetar arrays y objetos
Manejo de StringsManejo básico de Strings, cadenas de caracteres
OperadoresUso de operadores de comparación y lógicos
PromesasGestión de peticiones asíncronas con promesas
SleepImplementación de la función sleep() en JS
ThisUso de la palabra reservada this en diferentes contextos
MapsTe enseñamos cuando usar Map y cuando Object con ejemplos
Switchery JSLibrería para modificar el estilo de los checkbox
Mejores libros Javascript EspañolEncuentra los mejores libros para aprender JS y convertirte en el desarrollador más demandado.
Exception JSManejo de excepciones en Javascript, control de errores y flujo de programa.
Obfuscator JavascriptProtege tu código Javascript Ofuscándolo
Javascript desde ceroAprende los conceptos básicos de Javascript, ponte en marcha.
LodashLodash hace que la manipulación de datos en JavaScript sea más fácil y menos propensa a errores
Formatdate JSFormateo y trabajo con fechas en javascript de forma sencilla.
DayjsBiblioteca para la gestión de fechas
padStartManeja cadenas de texto con la función padStart()