DEV Community

Cover image for Desestruturando Objetos em JavaScript - Object Destructuring
Barbara Robles 🇧🇷
Barbara Robles 🇧🇷

Posted on

2 1 1 1 1

Desestruturando Objetos em JavaScript - Object Destructuring

Na semana passada falamos de desestruturação de arrays aqui. Agora vamos entender de uma vez por todas desestruturação de objetos!

Conteúdo:

Sintaxe Básica

Desestruturação é uma maneira simples de extrair dados de arrays ou objetos em variáveis separadas. Vamos dar uma olhada em como funciona a desestruturação de objetos.

Tomemos este objeto como exemplo:

const user = {
  userName: 'Ada',
  age: 28,
  city: 'São Paulo'
};
Enter fullscreen mode Exit fullscreen mode

Agora vamos extrair os dados de city e age usando a desestruturação:

const { city, age } = user;
Enter fullscreen mode Exit fullscreen mode

Aqui, criamos duas variáveis chamadas city e age. A elas serão atribuídos os valores das propriedades de mesmo nome do objeto user.

Isso representa uma grande vantagem, pois agora podemos trabalhar isoladamente com essas informações:

console.log(city); // output: 'São Paulo'
console.log(age); // output: 28 
Enter fullscreen mode Exit fullscreen mode

Alguns detalhes importantes devem ser anotados:

  1. Observe que a propriedade userName foi omitida na desestruturação. Diferentemente da desestruturação de arrays, não é necessário pular manualmente as propriedades;

  2. A ordem das variáveis listadas na desestruturação não importa. Veja que coloquei city antes de age, o que não resultará em erro. Isso porque em objetos, as propriedades não seguem uma ordem fixa;

  3. Os nomes das variáveis podem ser alterados! Veja abaixo:

Renomeando Propriedades

Podemos facilmente alterar o nome das propriedades extraídas do objeto ao mesmo tempo em que fazemos a atribuição por desestruturação. Essa recurso é bastante útil para quando queremos evitar conflitos entre nomes:

const { city: c, age: a } = user;

console.log(c); // output: 'São Paulo'
console.log(a); // output: 28 
Enter fullscreen mode Exit fullscreen mode

Valores Padrão

É possível que algum dos valores extraídos seja undefined, o que pode ser uma fonte de bugs no seu código. Podemos evitar isso de uma maneira muito simples!

Ainda usado o objeto user acima, suponhamos que queremos extrair uma propriedade nationality, que não foi definida. Para evitar que a variável fique com o valor de undefined, vamos atribuir a ela um valor padrão, desta forma:

const { city, age, nationality = 'brasileira' } = user;
Enter fullscreen mode Exit fullscreen mode

Renomeando Variáveis e Valores Padrão

Além disso, é possível juntar as sintaxes acima, combinando os processos de renomear variáveis com o de definir valores padrões:

const { 
  city: c = 'Brasília',
  age: a = 18,
  nationality: n = 'brasileira'
} = user;
Enter fullscreen mode Exit fullscreen mode

E no caso do objeto user, a saída agora será esta:

console.log(c); // output: 'São Paulo'
console.log(a); // output: 28 
console.log(n); // output: 'brasileira'
Enter fullscreen mode Exit fullscreen mode

Perceba que o valor padrão somente será aplicado apenas para n, já que os outros valores foram definidos previamente.

Objetos Aninhados

Se o objeto em questão contiver outro objeto dentro dele, também é possível fazer desestruturação do objeto aninhado. Vamos acrescentar no objeto user as notas das disciplinas:

const user = {
  userName: 'Ada',
  age: 28,
  city: 'São Paulo',
  grades: {
    math: 9.5,
    portuguese: 9.2,
    chemistry: 10,
    history: 7.5,
    geography: 7.8,
  }
};
Enter fullscreen mode Exit fullscreen mode

Para trabalhar isoladamente com as notas, podemos fazer a desestruturação desta maneira:

const {
  grades: {
    math, 
    portuguese, 
    chemistry, 
    history, 
    geography 
  } 
} = user;
Enter fullscreen mode Exit fullscreen mode

E assim, os valores poderão ser acessados separadamente:

console.log(math) // output: 9.5
console.log(portuguese) // output: 9.2
console.log(chemistry) // output: 10
console.log(history) // output: 7.5
console.log(geography) // output: 7.8
Enter fullscreen mode Exit fullscreen mode

Alterando Variáveis

Agora vamos para a situação onde as variáveis já foram declaradas e inicializadas, como a e b abaixo:

let a = 55;
let b = 77

const object = {
  a: 41,
  b: 27,
  c: 14
};
Enter fullscreen mode Exit fullscreen mode

Como podemos atribuir a a e b os valores contidos no objeto? Não podemos escrever let {a, b} = object nem const {a, b} = object, uma vez que estaríamos declarando as variáveis novamente. Mas também não podemos escrever {a, b} = object, pois o JavaScript entende que toda linha começando com chaves {} é um bloco de código e isso vai gerar um erro de sintaxe no código.

A solução está em envolver o código usando parênteses:

({a, b} = object);

console.log(a); // output: 41
console.log(b); // output: 27
Enter fullscreen mode Exit fullscreen mode

Assim, o JavaScript entenderá que se trata de uma desestruturação e não um bloco de código.

Obrigada por ter chegado até aqui! =)
Dúvidas, comentários, sugestões? Comenta aqui embaixo!

meme da galinha - eu tenho muito a aprender

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (2)

Collapse
 
falcao_g profile image
Falcão

gostei do artigo, parabéns! sempre bom ver brs por aqui

Collapse
 
barobles profile image
Barbara Robles 🇧🇷

Hehe 🇧🇷🇧🇷obrigada!

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs