DEV Community

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

Posted on • Edited on

1 1

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 →

Sentry blog image

How I fixed 20 seconds of lag for every user in just 20 minutes.

Our AI agent was running 10-20 seconds slower than it should, impacting both our own developers and our early adopters. See how I used Sentry Profiling to fix it in record time.

Read more

Top comments (0)

SurveyJS custom survey software

Simplify data collection in your JS app with a fully integrated form management platform. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more. Integrates with any backend system, giving you full control over your data and no user limits.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay