19 de maio de 2020  -  11 min de leitura

Desestruturação de objetos e arrays em Javascript

Como usar a desestruturação em Javascript

A sintaxe da atribuição via desestruturação é uma expressão JavaScript que possibilita descompactar valores de arrays ou propriedades de objetos em variáveis distintas. Isto significa, que podemos extrair dados de arrays ou objetos, e atribuir estes dados à variáveis.

Você pode ser perguntar, para que vou fazer isso? ou como isso me ajuda? Bom para responder sua pergunta, vamos ver os exemplos abaixo.

Desestruturando Arrays

const lista = ['Gabriel', 'Asakawa', 'Brasil']
const nome = lista[0] // Gabriel
const sobrenome = lista[1] // Asakawa
const pais = lista[2] // Brasil

console.log(nome, sobrenome, pais) // Gabriel Asakawa Brasil

No código acima, usei uma forma de extrair elementos de um array que funciona e era muito utilizada, porém veja que devo indicar a posição de cada elemento do array em uma linha diferente. Isto torna o código mais verboso.

Utilizando a desestrutração o código pode ser reduzido, veja algums cenários.

Básico

const lista = ['Gabriel', 'Asakawa', 'Brasil']
const [nome, sobrenome, pais] = lista

console.log(nome, sobrenome, pais) // Gabriel Asakawa Brasil

Utilizando a funcionalidade de desestrutração do JS, o código tem menos linhas e é mais fácil de ler.

Pulando elementos do array

const lista = ['Gabriel', 'Asakawa', 'Brasil', 'São Paulo']
const [nome, , pais, estado] = lista

console.log(nome, pais, estado) // Gabriel Brasil São Paulo

Veja que o array que recebe a atribuição tem uma vírgula sobrando. Na verdade não está sobrando, ela representa a posição do elemento do array que não queriamos extrair (que foi pulado).

Valores default

Podemos atribuir um valor default a uma variável, no caso em que o valor extraído do array é undefined.

const [a, b = 7] = [1]

console(a, b) // 1 7

Usando o operador (...)

Quando é necessário atribuir a uma variável um elemento do array e a outra variável o resto dos elementos do mesmo array, podemos utilizar o operador (...).

const lista = ['Gabriel', 'Pai', 'Desenvolvedor', 'Nerd']
const [nome, ...outros] = lista

console.log(nome) // Gabriel
console.log(outros) // ['Pai', 'Desenvolvedor', 'Nerd']

Desestruturando Objetos

A desestrutração de um objeto é similar à do array, a diferença é o uso de chaves { } no lugar de colchetes [ ].

const pessoa = {
    nome: 'Gabriel',
    sobrenome: 'Asakawa',
    pais: 'Brasil'
}
const nome = pessoa.nome // Gabriel
const sobrenome = pessoa.sobrenome // Asakawa
const pais = pessoa.pais // Brasil

console.log(nome, sobrenome, pais) // Gabriel Asakawa Brasil

No código acima, usei uma forma de extrair elementos de um objeto que funciona bem, mas o código é verboso e repetitivo. Então mais uma vez podemos utilizar a desestrutração e o código pode ser reduzido, veja algums cenários.

Básico

const pessoa = {
    nome: 'Gabriel',
    sobrenome: 'Asakawa',
    pais: 'Brasil'
}
// correto
const {nome, sobrenome, pais} = pessoa
console.log(nome, sobrenome, pais) // Gabriel Asakawa Brasil

// incorreto
const {nome, sobre, pais} = pessoa
console.log(nome, sobre, pais) // Gabriel undefined Brasil

Na desestrutração de objetos direta, o nome da variável que irá receber o valor da propriedade do objeto, deve ser igual ao nome da propriedade do objeto. Caso contrário a atribuição do valor não será feita.

Objetos aninhados

const pessoa = {
    nome: 'Gabriel',
    sobrenome: 'Asakawa',
    pais: 'Brasil',
    endereco : {
        rua: 'Av Paulista',
        cep: '00000-000'
    }
}
const {nome, sobrenome, endereco: {rua, cep}} = pessoa

console.log(nome, sobrenome, rua, cep) // Gabriel Asakawa Av. Paulista 00000-000 

Nomes de variáveis diferentes

Como falei antes, na hora de desestrutrar um objeto de forma direta, o nome da variável que irá receber o valor da proprieade do objeto deve ser igual, porém é possível usar outro nome de variável caso seja necessário.

const pessoa = {
    nome: 'Gabriel',
    sobrenome: 'Asakawa',
    pais: 'Brasil'
}
const {nome, sobrenome: lastname} = pessoa

console.log(nome, lastname) // Gabriel Asakawa

Outro casos de uso, podem ser vistos aqui.

Conclusão

Utilizar a desestrutração, ajuda a reduzir linhas de código e permite que o código seja mais legível. Além disso é possível também extrair somente os dados de um array ou objeto, que realmente são necessários naquele momento.

Se tiver dúvidas, elogios, sugestões, deixe seu comentário. Se também curtiu o conteúdo, compartilhe com os seus amigos.

Salvando alterações locais com o DevTools do browserFerramentas que uso para trabalhar