La desestructuración(destructuring) consiste en extraer los valores de arrays o propiedades de objetos en distintas variables.
Desestructuración de objetos
La desestructuración de objetos implica extraer las propiedades de un objeto en variables. Mediante el mismo nombre de la propiedad del objeto con la siguiente sintaxis:
Antes de ES6, necesitabas acceder al objeto con la notación punto o corchetes por cada propiedad que se necesita y asignar ese valor a una variable diferente.
var usuario ={nombre:"Andres",edad:23,plataforma:"Platzi"}var nombre = usuario.nombrevar edad = usuario.edadvar plataforma = usuario["plataforma"]console.log(nombre)// 'Andres' console.log(edad)// 23console.log(plataforma)// 'Platzi'
Con la desestructuración puedes realizar lo mismo, pero en una sola línea, provocando que el código seas más legible y mantenible.
const usuario ={nombre:"Andres",edad:23,plataforma:"Platzi"}const{nombre: name,edad: age,plataforma: platform }= usuario
console.log(name)// 'Andres' console.log(age)// 23console.log(platform)// 'Platzi'console.log(nombre)// Uncaught ReferenceError: nombre is not defined
Desestructuración en parámetros de una función
Si envías un objeto como argumento en la invocación a la declaración de una función, puedes utilizar la desestructuración en los parámetros para obtener los valores directamente. Ten en cuenta que el nombre debe ser igual a la propiedad del objeto.
La desestructuración de arrays consiste en extraer los valores de un array en variables, utilizando la misma posición del array con una sintaxis similar a la desestructuración de objetos.
Desestructuración para valores retornados de una función
Cuando una función retorna un array, puedes guardarlo en una variable. Por ende, puedes utilizar la desestructuración para utilizar esos valores por separado de manera legible.
En el siguiente ejemplo, la función useState retorna un array con dos elementos: un valor y otra función actualizadora.
functionuseState(value){return[value,updateValue()]}//Sin desestructuración const estado =useState(3)const valor = estado[0]const actualizador = estado[1]//Con desestructuración const[valor, actualizador]=useState(3)
Lo que puedes hacer con desestructuración, pero no es recomendable
Si necesitas un elemento en cierta posición, puedes utilizar la separación por comas para identificar la variable que necesitas.
const array =[1,2,3,4,5]const[,,,, cinco ]= array
console.log(cinco)// 5
Como los arrays son un tipo de objeto, puedes utilizar la desestructuración de objetos mediante el índice y utilizando un nombre para la variable.
De los mejores features que se implementaron, algo muy usado en React
const[value, setValue]=useState()
Otra ejemplo de una manera practica de acceder a los atributos que nos interesan:
// For of iteration and destructuringconst people =[{name:'Mike Smith',family:{mother:'Jane Smith',father:'Harry Smith',sister:'Samantha Smith',},age:35,},];for(const{name: n,family:{father: f }}of people){console.log(`Name: ${n}, Father: ${f}`);}
gran aporte
Muy interesante esa forma
Hola compañeros
Me gustaría compartirles una extensión de VS code que en lo personal me gusta mucho usar cuando hacemos este tipo de ejercicios en los que no estamos estructurando una página como tal sino entendiendo un concepto.
++La extensión en cuestión se llama++ ++Better Comments++
Por otra parte les dejo el repositorio en el que actualmente estoy trabajando este curso y un pedazo del código por si les interesa
//* Array destructuringlet fruits =["Apple","Banana"];let[a, b]= fruits;console.log(a, b);console.log(a, fruits[1]);//! Both console logs will return "Apple Banana"//* Object destructuringlet user ={userName:"Paco",age:19};console.log(user.userName, user.age);let{ userName, age }= user;console.log(userName, age);//! Both console logs will return "Paco 19" but the second one is using object destructuring so we can use the property names instead "Object.property"
Like si llevas el orden correcto de los archivos.
Ojo con copiar elementos, porque hay varias veces que al hacer esto, realmente estamos llamando a su posicion de memoria.
¿Por qué no puedo usar = para copiar una matriz?
Debido a que las matrices en JS son valores de referencia, cuando intente copiarlas usando el = solo copiará la referencia a la matriz original y no el valor de la matriz. Para crear una copia real de una matriz, debe copiar el valor de la matriz en una nueva variable de valor. De esa forma, esta nueva matriz no hace referencia a la dirección de la matriz anterior en la memoria.
const sheeps = ['🐑', '🐑', '🐑'];
const fakeSheeps = sheeps;
const cloneSheeps = [...sheeps];
console.log(sheeps === fakeSheeps);
// true --> it's pointing to the same memory space
console.log(sheeps === cloneSheeps);
// false --> it's pointing to a new memory space
De verdad nunca mira los numeros de archivos que crea? jajajajaja
📓 Archivos del Proyecto 📓
Pasos 📌
• Dentro de la carpeta es6, crear el archivo llamado: 04-rest-spread.js
◦ El código de los ejercicios queda:
//Compilar: seleccionar el código + click derecho + Run Code//Ejercicio #1//Arrays destructuringlet fruits =['Apple','Banana'];let[a, b]= fruits;console.log(a, b);/*output:
Apple Banana
*/console.log(a, fruits[1]);/*output:
Apple Banana
*///Ejercicio #2//Object destructuringlet user ={username:'Oscar',age:34};let{ username, age}= user;console.log(username, age);/*output:
Oscar 34
*/console.log(username, user.age);/*output:
Oscar 34
*/
//arrays destructuringlet fruits =["Apple","Banana"];let[a, b]= fruits;console.log(a, b);//object destructutingconst person ={lasName:"Ccoyllo",age:25,country:"PE",};console.log(person);const{ lasName, age, country }= person;console.log(`My name is ${lasName},
I have ${age}. I am from ${country}`);
Aquí en la MDN está un artículo sobre como se realiza la desestructuración.
.
También sobre la desestructuración de objetos
Consulta, como haces para correr visual code desde tu ipad?
Sin embargo cuando ejecuto algo en el VisualStudio Code arroja lo siguiente:
[Running] node "/home/lalvarez/Documentos/PLATZI/Cursos/JavaScript/ECMA SCRIPT/curso-ecmascript/src/es6/tempCodeRunnerFile.js"
/bin/sh: línea 1: node: orden no encontrada
[Done] exited with code=127 in 0.017 seconds
Agradezco si alguien me puede echar una manito
Gracias
entonces la desestructuración es convertir los objetos y/o arrays en variables que podemos usar de manera global en cualquier parte del codigo segun lo que entendi?
La desestructuración te permite almacenar los valores de un array o las propiedades de un objeto, dentro de variables. Pero no las "conviertes" en sí, solamente tomas de allí esos valores. Y no siempre será de forma global, todo va a depender de la parte del código donde apliques la desestructuración.
ES6: asignación de desestructuración
La asignación por desestructuración es una característica introducida en ECMAScript 6 (también conocido como ES6) que permite extraer valores de arrays o propiedades de objetos y asignarlos a variables individuales en una sola declaración. Esto facilita la manipulación de datos y la escritura de código más conciso.
Aquí tienes ejemplos de cómo funciona la asignación por desestructuración en ES6:
Desestructuración de Arrays:
// Ejemplo con arrayconst numbers =[1,2,3,4,5];// Asignación de desestructuraciónconst[first, second,...rest]= numbers;console.log(first);// 1console.log(second);// 2console.log(rest);// [3, 4, 5]
Desestructuración de Objetos:
// Ejemplo con objetoconst person ={name:'John',age:30,city:'New York'};// Asignación de desestructuraciónconst{ name, age, city }= person;console.log(name);// 'John'console.log(age);// 30console.log(city);// 'New York'
Desestructuración Anidada:
// Ejemplo con objeto anidadoconst student ={name:'Alice',info:{grade:'A',school:'Example High School'}};// Asignación de desestructuración anidadaconst{ name,info:{ grade, school }}= student;console.log(name);// 'Alice'console.log(grade);// 'A'console.log(school);// 'Example High School'
La asignación por desestructuración también se puede combinar con valores por defecto y renombramiento de variables, lo que hace que sea aún más versátil y poderosa.
// Uso de valores por defecto y renombramientoconst{ title ='No Title',author: writer ='Unknown'}= book;console.log(title);// 'No Title' (si 'title' no está en 'book')console.log(writer);// Valor de 'author' en 'book' o 'Unknown' si no está presente
La asignación por desestructuración es una técnica útil para escribir código más limpio y legible, especialmente cuando se trabaja con datos complejos como arrays y objetos.
Espero les sirva como ejemplo. 👨💻
¿Se pueden asignar valores por defecto en la asignación por desestructuración en ECMAScript 6?
Sí, se pueden asignar valores por defecto utilizando la sintaxis = después del nombre de la variable
let fruit =['apple','banana'];let[a, b, c='peras']= fruit
console.log(a, b, c);//salida: 'apple' 'banana' 'peras'
¿Es posible renombrar variables durante la asignación por desestructuración en ECMAScript 6?
Sí, se puede utilizar la sintaxis nombreOriginal: nuevoNombre para renombrar una variable.
let user ={nombre:'Franco',pais:'Arg'}let{nombre: name, pais}= user;console.log(name, pais);//salida: 'Franco' 'Arg'
Repositorio github del profe → Archivo manejado en la clase:
Comparto como complemento de unas notas mías respecto a destructuring en objetos:
const cliente03 ={a:'Ezequiel',b:'Das',c:'Av Rivadavia 1540',d:'Centro',e:1586902510}const{c: address,a: names,b: lastname}= cliente03;// Podemos asignar con qué key del objeto queremos que se guarde el valor de la variable sin importar el ordenconsole.log(names);console.log(lastname);console.log(address);