Desestruturação de arrays e objetos
Esta aula ensina a desestruturação de arrays e objetos em JavaScript, uma sintaxe que permite extrair dados de estruturas complexas de forma concisa e legível. Abrange sintaxe básica, valores padrão, renomeação de variáveis e desestruturação aninhada, com exemplos práticos e exercícios.
A desestruturação (destructuring) é um recurso poderoso introduzido no ES6 que permite extrair valores de arrays e objetos de maneira direta e expressiva. Em vez de acessar elementos ou propriedades manualmente, você pode 'desestruturar' a estrutura em variáveis individuais em uma única linha de código. Isso torna o código mais limpo e reduz a repetição.
Nesta aula, vamos explorar a sintaxe básica para arrays e objetos, como definir valores padrão para casos de ausência, renomear variáveis ao desestruturar objetos e lidar com estruturas aninhadas (arrays dentro de objetos, objetos dentro de arrays, etc.). Ao final, você terá domínio sobre essa técnica essencial para programação moderna em JavaScript.
Sintaxe
A desestruturação segue uma sintaxe que espelha a estrutura do dado: colchetes [] para arrays e chaves {} para objetos. Do lado esquerdo da atribuição, colocamos os nomes das variáveis que receberão os valores, na mesma ordem ou com os mesmos nomes das propriedades.
Desestruturação de Arrays:
const numeros = [10, 20, 30];
const [a, b, c] = numeros;
console.log(a); // 10
console.log(b); // 20
console.log(c); // 30Você pode ignorar elementos usando vírgulas vazias:
const [primeiro, , terceiro] = numeros;
console.log(primeiro); // 10
console.log(terceiro); // 30Desestruturação de Objetos:
const pessoa = { nome: 'Ana', idade: 25 };
const { nome, idade } = pessoa;
console.log(nome); // 'Ana'
console.log(idade); // 25A ordem não importa; o que importa é o nome da propriedade. Se a propriedade não existir, a variável recebe undefined.
Valores padrão
Você pode definir valores padrão para variáveis caso a propriedade ou o elemento do array seja undefined. Isso é útil para evitar valores inesperados.
Em arrays:
const arr = [1];
const [x, y = 10] = arr;
console.log(x); // 1
console.log(y); // 10 (padrão)Em objetos:
const config = { tema: 'escuro' };
const { tema, cor = 'azul' } = config;
console.log(tema); // 'escuro'
console.log(cor); // 'azul' (padrão)O valor padrão só é aplicado se o valor extraído for estritamente undefined. Valores como null não disparam o padrão.
Renomeação
Ao desestruturar objetos, você pode renomear a variável para um nome diferente da propriedade original, usando a sintaxe { propriedade: novoNome }.
const usuario = { nome: 'Carlos', idade: 30 };
const { nome: nomeUsuario, idade: idadeUsuario } = usuario;
console.log(nomeUsuario); // 'Carlos'
console.log(idadeUsuario); // 30Você pode combinar renomeação com valores padrão:
const { cor: corFundo = 'branco' } = {};
console.log(corFundo); // 'branco' (padrão)Para arrays, renomeação não se aplica diretamente (os índices são posicionais).
Aninhada
Desestruturação aninhada permite extrair dados de estruturas complexas, como objetos dentro de arrays, arrays dentro de objetos, ou objetos dentro de objetos.
Objeto aninhado:
const dados = {
id: 1,
perfil: {
nome: 'Maria',
endereco: { cidade: 'São Paulo', estado: 'SP' }
}
};
const { perfil: { nome, endereco: { cidade } } } = dados;
console.log(nome); // 'Maria'
console.log(cidade); // 'São Paulo'Array de objetos:
const alunos = [
{ nome: 'João', nota: 8 },
{ nome: 'Ana', nota: 9 }
];
const [primeiroAluno, segundoAluno] = alunos;
console.log(primeiroAluno.nome); // 'João'
// Extraindo diretamente propriedades:
const [{ nome: nome1 }, { nome: nome2 }] = alunos;
console.log(nome1); // 'João'
console.log(nome2); // 'Ana'Mistura de arrays e objetos:
const dadosMistos = {
titulo: 'Aula',
tags: ['JS', 'ES6'],
autor: { nome: 'Pedro', idade: 28 }
};
const { titulo, tags: [tag1, tag2], autor: { nome: autorNome } } = dadosMistos;
console.log(titulo); // 'Aula'
console.log(tag1); // 'JS'
console.log(autorNome); // 'Pedro'Lembre-se de que a desestruturação aninhada deve espelhar exatamente a estrutura do dado, caso contrário resultará em erro ou undefined.
Boas práticas
- Use desestruturação para extrair múltiplos valores de forma concisa, especialmente em parâmetros de função e retornos de API.
- Prefira valores padrão para propriedades opcionais, evitando verificações manuais.
- Renomeie variáveis quando o nome original for muito genérico ou conflitar com outras variáveis.
- Evite aninhamento excessivo que torne o código difícil de ler; considere extrair partes intermediárias.
Referências
- MDN: Destructuring assignment
- JavaScript.info: Destructuring assignment
- W3Schools: JavaScript Destructuring
- Exploring ES6: Destructuring
- Eloquent JavaScript: Data Structures (destructuring)
Exercícios
Dado o array
[1, 2, 3, 4], use desestruturação para extrair o primeiro e o terceiro elementos em variáveisaec. Ignore o segundo.✓ Resposta:const arr = [1, 2, 3, 4]; const [a, , c] = arr; console.log(a); // 1 console.log(c); // 3Desestruture o objeto
{ produto: 'Caneta', preco: 2.5 }extraindo as propriedadesprodutoepreco. Atribua um valor padrão de1.0paraprecocaso não exista.✓ Resposta:const obj = { produto: 'Caneta', preco: 2.5 }; const { produto, preco = 1.0 } = obj; console.log(produto); // 'Caneta' console.log(preco); // 2.5Desestruture o objeto
{ nome: 'José', idade: 40 }renomeandonomeparanomePessoaeidadeparaidadePessoa.✓ Resposta:const pessoa = { nome: 'José', idade: 40 }; const { nome: nomePessoa, idade: idadePessoa } = pessoa; console.log(nomePessoa); // 'José' console.log(idadePessoa); // 40Dado o objeto aninhado
{ a: { b: { c: 42 } } }, extraia o valor decem uma variável chamadavalor.✓ Resposta:const obj = { a: { b: { c: 42 } } }; const { a: { b: { c: valor } } } = obj; console.log(valor); // 42Desestruture o array
[ { x: 1 }, { y: 2 } ]extraindo os valores dexeyem variáveisvXevY.✓ Resposta:const arr = [ { x: 1 }, { y: 2 } ]; const [ { x: vX }, { y: vY } ] = arr; console.log(vX); // 1 console.log(vY); // 2