Destructuring assignment o extracción de elementos de arrays y objectos en ECMAScript 6

En este artículo voy a hablar de lo que en ECMAScript 6 se conoce como Destructuring assignment. Esta nueva sintaxis te ayuda a extraer elementos de arrays u objetos en variables, con el objetivo de facilitar su uso. Vamos a ver un ejemplo con arrays y otro con objetos para que veas cómo funciona.

Desestructurando un array

Imagínate que tenemos un array con un conjunto de valores. Hasta ahora, la forma que teníamos de recuperar sus valores era moviéndonos por el índice del mismo, ya fuera de forma manual o a través de un iterador.

var animals = ['dog', 'cat', 'fish', 'horse', 'lion', 'bird'];
console.log(animals[0]); //dog
console.log(animals[4]); //lion
console.log(animals[2]); //fish 

Ahora, con la desestructuración, tenemos otra forma de recuperar estos valores y asignarlos directamente a variables:

var animals = ['dog', 'cat', 'fish', 'horse', 'lion', 'bird'];
var [dog, , , , lion, ] = animals;
console.log(dog); //dog
console.log(lion); //lion 

En una sola línea asignamos los valores que necesitamos del array en variables, utilizando tantas comas como sean necesarias hasta llegar a su posición dentro del array. Al final es una forma acortada de escribir lo anterior.

Otro escenario en este sentido, realmente elegante, es trabajar en conjunto con la función split:

var [firstName, lastName] = 'Gisela Torres'.split(' ');
console.log(firstName); //Gisela
console.log(lastName); //Torres 

Desestructurando un objeto

El otro ejemplo tiene que ver con la desestructuración de los objetos. En el caso de los arrays es necesario tener en cuenta la posición que tiene el elemento dentro del array, pero aquí sólo nos basta con saber el nombre de la propiedad que queremos extraer. Por ejemplo:

var tvShow = {
    title: 'El Embarcadero',
    seasons: 2,
    watched: true
};
var { title, watched } = tvShow;
console.log(title); //El embarcadero
console.log(watched); //true

Otra cosa chula que se puede hacer es pasar el objecto completo a una función pero ya en la definición de la misma extraer únicamente las propiedades con las que quiero trabajar, lo cual nos reduce unas cuantas líneas de código:

var tvShow = {
    title: 'El Embarcadero',
    seasons: 2,
    watched: true
};
function watching({ title, seasons }) {
    console.log(`I am watching ${title}. ${seasons} seasons of entertainment!`);
}
watching(tvShow);

¡Saludos!

2 Comments

  1. giorgi marzo 2, 2020 at 2:53 am

    Hola como estas?. Es mi primera vez visitando tu pagina y me ha encantado, no te andas por las ramas y eso me gusta. Estoy comenzando como desarrollador, me recomendarias paginas o materiales para practicar js.

    Reply
  2. Albert Gutiérrez septiembre 28, 2021 at 4:02 am

    Muy buen artículo!
    Tanto en el caso del artículo del spread operator y este, me sirven para entender mejor el Redux

    Reply

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.