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!