La desestructuración de objetos es una característica de JavaScript que permite extraer propiedades de un objeto y asignarlas a variables de forma individual.
Con la desestructuración, podemos acceder rápidamente a las propiedades de un objeto sin necesidad de usar múltiples líneas de código (lo que simplifica mucho el código).
Es muy útil a la hora de trabajar con datos complejos, como los objetos anidados, o los que obtenemos como respuestas a APIs.
Veremos la destructuración de colecciones
Sintaxis básica
La desestructuración de objetos utiliza llaves ({}
) para extraer las propiedades del objeto y asignarlas a variables. La clave de cada propiedad debe coincidir con el nombre de la variable.
La sintaxis básica es la siguiente:
const objeto = {
propiedad1: 'valor1',
propiedad2: 'valor2'
};
const { propiedad1, propiedad2 } = objeto;
En este ejemplo, las variables propiedad1
y propiedad2
se asignan a las propiedades correspondientes del objeto objeto
.
Vamos a verlo con un ejemplo
const producto = { nombre: "Ordenador", precio: 1000 };
const { nombre, precio } = producto;
console.log(nombre); // "Ordenador"
console.log(precio); // 1000
Nombres personalizados
Si necesitas usar un nombre de variable distinto al de la propiedad, puedes renombrarlas al momento de la desestructuración.
const producto = { nombre: "Ordenador", precio: 1000 };
const { nombre: nombreProducto, precio: costo } = producto;
console.log(nombreProducto); // "Ordenador"
console.log(costo); // 1000
Valores por defecto
También podemos asignar valores predeterminados a los valores. Si la propiedad no existe en el objeto, se usará el valor por defecto.
const producto = { nombre: "Ordenador" };
const { nombre, precio = 500 } = producto;
console.log(nombre); // "Ordenador"
console.log(precio); // 500
En este ejemplo, como la propiedad precio
no existe en el objeto, se asigna el valor predeterminado 500
a la variable precio
.
Objetos anidados
Cuando las propiedades están anidadas dentro de objetos, puedes desestructurarlas de manera jerárquica.
const usuario = {
id: 1,
perfil: { nombre: "Ana", edad: 30 },
};
const {
perfil: { nombre, edad },
} = usuario;
console.log(nombre); // "Ana"
console.log(edad); // 30
Uso en funciones
La desestructuración también se puede aplicar directamente en los parámetros de las funciones.
function imprimirPropiedades({ propiedad1, propiedad2 }) {
console.log(propiedad1);
console.log(propiedad2);
}
const objeto = {
propiedad1: 'valor1',
propiedad2: 'valor2'
};
imprimirPropiedades(objeto);
En este ejemplo,
- Se pasa el objeto
objeto
a la funciónimprimirPropiedades
- Ahí se desestructuran las propiedades
propiedad1
ypropiedad2
del objeto y se imprimen.
También se pueden usar en los objetos que devuelve una función.
function obtenerDatos() {
return { nombre: "Mario", edad: 33 };
}
const { nombre, edad } = obtenerDatos();
console.log(nombre); // "Mario"
console.log(edad); // 33
Este ejemplo muestra cómo desestructurar directamente el valor devuelto por una función en nombre
y edad
.
Ejemplos prácticos
Extraer valores de respuestas de APIs
La destructuración es muy útil para manejar datos complejos provenientes de APIs.
const respuesta = {
status: 200,
data: { usuario: { id: 1, nombre: "Laura" } },
};
const {
data: {
usuario: { nombre },
},
} = respuesta;
console.log(nombre); // "Laura"
Desestructuración en bucles
La desestructuración también se puede usar dentro de bucles, lo que permite trabajar fácilmente con arrays de objetos.
const usuarios = [
{ nombre: "Juan", edad: 25 },
{ nombre: "María", edad: 30 },
{ nombre: "Carlos", edad: 35 },
];
for (const { nombre, edad } of usuarios) {
console.log(`${nombre} tiene ${edad} años.`);
}
// "Juan tiene 25 años."
// "María tiene 30 años."
// "Carlos tiene 35 años."
En este ejemplo, desestructuramos cada objeto usuario
directamente dentro del bucle for...of
.
Desestructuración con arrays y objetos
La desestructuración se puede combinar tanto con objetos como con arrays, lo que permite extraer datos de ambos tipos.
const respuesta = {
usuario: { nombre: "Laura", edad: 28 },
productos: ["Ordenador", "Smartphone"]
};
const {
usuario: { nombre },
productos: [producto1, producto2]
} = respuesta;
console.log(nombre); // "Laura"
console.log(producto1); // "Ordenador"
console.log(producto2); // "Smartphone"
Aquí estamos extrayendo tanto propiedades de un objeto como elementos de un array en una sola línea.