DEV Community

Cover image for js❤️ - Destructuring
Javi Carrasco
Javi Carrasco

Posted on • Edited on

js❤️ - Destructuring

Destructuring

Destructuring nos permite extraer elementos concretos de un array o de un objeto.

Por ejemplo con arrays:

Guardar los elementos de un array en variables

const [year, month, day] = [2022, 1, 3];
// year = 2022, month = 1, day = 3
Enter fullscreen mode Exit fullscreen mode

Incluso ignorando algunos valores

const [year, , day] = [2022, 1, 3];
// year = 2022, day = 3
Enter fullscreen mode Exit fullscreen mode

Guardar el primer elemento de un array

const [first] = [4, 7, 2];
// first = 4
Enter fullscreen mode Exit fullscreen mode

Guardar la respuesta de una función

const [name, setName] = useContext("Javi");
// name = "Javi", setName = function
Enter fullscreen mode Exit fullscreen mode

Extraer variables de un parámetro array

const a = { name: "Javi", num: 1 };
// Object.entries(a) = [
//   ["name", "Javi"],
//   ["num", 1],
// ];
Object.entries(a).forEach(([key, value]) => {
  // key = "name", value = "Javi"
  // key = "num", value = 1
});

Enter fullscreen mode Exit fullscreen mode

Intercambiar el valor de dos variables

[screen, backgroundBuffer] = [backgroundBuffer, screen];
Enter fullscreen mode Exit fullscreen mode

Y también con objetos:

const { a, c } = { a: 1, b: 2, c: 3, d: 4 };
// a = 1, c = 3
Enter fullscreen mode Exit fullscreen mode

Incluso a varios niveles

const response = { error: { message: "failed" } };
const {
  error: { message },
} = response;
// message = "failed"
Enter fullscreen mode Exit fullscreen mode

Cambiándole el nombre a la variable (alias)

const response = { error: { message: "failed" } };
const {
  error: { message: errMsg },
} = response;
// errMsg = "failed"
Enter fullscreen mode Exit fullscreen mode

Y combinando objetos y arrays

const errors = [{ message: "field required" }, { message: "invalid date" }];
const [{ message }] = errors;
// message = "field required"
Enter fullscreen mode Exit fullscreen mode

Extraer parámetros:

function logUser({ name, role }) {
  console.log(name, role);
}
const user = {
  name: "Katie",
  surname: "Mitchell",
  age: 18,
  role: "World saver",
  // ...
};
logUser(user); // Katie World saver
Enter fullscreen mode Exit fullscreen mode

Extraer props de un componente de React:

function ReactComponent({ label, value }) {
  // ...
}
<ReactComponent label="name" value="Javi" />;
Enter fullscreen mode Exit fullscreen mode

Nombres de propiedad computados

Veamos el siguiente código

const createRandomUser = (attributeName, value) => {
  const user = {
    name: randomName(),
    age: randomAge(),
  }
  user[attributeName] = value;
  return user;
}
Enter fullscreen mode Exit fullscreen mode

Para establecer attributeName a value hemos tenido que añadir una nueva asignación después de la inicialización del objeto.

Ahora sin embargo podemos usar nombres de propiedad computados utilizando corchetes [], veamos:

const createRandomUser = (attributeName, value) => ({
  name: randomName(),
  age: randomAge(),
  [attributeName]: value
})
Enter fullscreen mode Exit fullscreen mode

Además ahora cuando queremos establecer un atributo en un objeto que ya tenemos almacenado en una variable con el mismo valor podemos ahorrarnos los dos puntos y la parte derecha.

Por ejemplo:

const name = "Katie";
const age = 18;
const user = {
  name: name, // ⛔️
  age: age // ⛔️
}
Enter fullscreen mode Exit fullscreen mode

Puede escribirse como:

const name = "Katie";
const age = 18;
const user = {
  name,
  age
}
Enter fullscreen mode Exit fullscreen mode

Siguiente - js❤️ - Destructuring + Spread → Los restantes →

Top comments (0)