Destructuring Assignment en Javascript

Publicado el 06 julio 2018 por Juan Ricardo Castro Lurita @pepoflex

Las sintaxis por destructuring assignment vendría a ser lo que llamamos extracción de los datos de arreglos u objetos trabajando con una sintaxis similar a la construcción de arrays y objetos literales, estos paquetes de datos una ves creados puedes usarlos dentro de tu código cuando así lo requieras.

Destructurar un Array

Por ejemplo si tenemos una variable foo con 3 datos uno, dos y tres al estar aun sin destructurarse estos datos pueden ser 3 datos separados, pero los podemos destructurar para darle un mejor orden, ahorro de línea de código y más limpieza

var foo = ["uno", "dos", "tres"];

// sin destructurar
var uno  = foo[0];
var dos  = foo[1];
var tres = foo[2]; // asignación en tres lineas

// con destructuración
var [uno, dos, tres] = foo; // asignación en una sola linea

También podemos devolver múltiples valores en una función mediante destructuring assignment, aunque en Javascript siempre es posible exportar un array, con destructuring assignment eso es más sencillo por ejemplo si tenemos la siguiente función llamada postres y me retorna 3 valores

function postres() {
  return [1, 2, 3];
}

Ignorando valores de retorno

Por otro lado si necesitas ignorar un o unos de lo valores de retorno solo debes hacer lo siguiente

function postres() {
  return [1, 2, 3];
}

var [a, , b] = postres(); //ignoramos el dato b
console.log("A es " + a + " B es " + b)

En el código anterior estamos ignorando el segundo valor es decir al exportar un array a = 1, b = 2 y c = 3, pero como estamos ignorando el segundo elemento del array no lo imprime, solo imprime el primer y segundo elemento.

Si queremos ignorar todos los datos del array solo escribimos

[,,] = postres();

Extraer valores de una Expresión regular

Si usamos el metod exec() para trabajar con una expresión regular y extraer el protocolo de conexion de una url, podemos ver que discrimina parte del nombre del dominio y nos imprime http

var url = "http://collectivecloudperu.com";

var parsedURL = /^(\w+)\:\/\/([^\/]+)\/(.*)$/.exec(url);
var [, protocol, fullhost, fullpath] = parsedURL;

console.log(protocol); // logs "http:"

Con Destructuring Assignment extraemos facilmente esa parte del array ignorando todo el valor de la url.

Destructurar un Objeto

Por ejemplo tenemos la variable o y la variable que le sigue abajo hereda sus valores, destructurando logramos asignarle nuevos nombres a las variables y mostramos los valores heredados de las variables anteriores

var o = {p: 42, q: true};
var {p, q} = o;

console.log(p); // 42
console.log(q); // true 

// Le asignamos nuevos nombres a las variables
var {p: foo, q: bar} = o;

console.log(foo); // 42
console.log(bar); // true

Destructuring assignment sin declaración

Podemos hacerlo deferente sin declarar en la sentencia de asignación

var a, b;

({a, b} = {a:1, b:2});

Destructuring de Objetos Anidados

Si tenemos datos anidados (Nested Objects) tambien podemos destructurarlos como en el siguiente ejemplo

var metadata = {
    title: "Collective Cloud Perú",
    translations: [
       {
        locale: "es",
        localization_tags: [ ],
        last_edit: "2018-07-06T08:43:37",
        url: "/5-principios-fundamentales-del-ux-design",
        title: "5 Principios Fundamentales del UX Design"
       }
    ],
    url: "/es-PE/5-principios-fundamentales-del-ux-design"
};

var { title: spanishTitle, translations: [{ title: localeTitle }] } = metadata;

console.log(englishTitle); // "Collective Cloud Perú"
console.log(localeTitle);  // "5 Principios Fundamentales del UX Design"

Interactuando con For en un destructuring

acá para

var elementos = [
  {
    nombre: "Categorias",
    items: {
      uno: "Node JS",
      dos: "Vue JS",
      tres: "Java",
      4: "Linkedin Ads"
    },
    ncat: 4
  },
  {
    nombre: "Articulos",
    items: {
      uno: "Qué significa cada etiqueta de tu Sitemap XML",
      dos: "5 Principios Fundamentales del UX Design",
      3: "Los hashtag en Instagram: ¿cómo seguirlos?"
    },
    nart: 3
  }
];

for (var {nombre: n, items: { dos: v } } of elementos) {
  console.log("Nombre: " + n + ", Valor: " + v);
}

// "Nombre: Categorias, Valor: Vue JS"
// "Nombre: Articulos, Valor: 5 Principios Fundamentales del UX Design""

Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.