Cópia Rasa e Profunda
Parte da seção Lógica & Fluxo do Journey de JavaScript da Coddy — lição 25 de 65.
Ao copiar objetos, temos dois tipos de cópias:
- Shallow Copy - copia apenas o primeiro nível
- Deep Copy - copia todos os níveis aninhados
Métodos de Cópia Rasa:
Usando o operador spread:
const original = { a: 1, b: { x: 2 } };
const spreadCopy = { ...original };Usando Object.assign(), que cria um novo objeto copiando propriedades do objeto de origem para o objeto de destino:
const assignCopy = Object.assign({}, original);Problema com Cópia Rasa (Shallow Copy):
original.b.x = 3;
console.log(spreadCopy.b.x); // 3
// (objetos aninhados compartilham a referência)
console.log(assignCopy.b.x); // 3Entendendo Métodos JSON e Deep Copy
JSON.stringify() converte um objeto JavaScript em uma string JSON:
const obj = { name: "John", age: 30 };
const jsonString = JSON.stringify(obj);
console.log(jsonString); // "{"name":"John","age":30}"JSON.parse() converte uma string JSON de volta em um objeto JavaScript:
const backToObject = JSON.parse(jsonString);
console.log(backToObject); // { name: "John", age: 30 }Cópia Profunda usando JSON:
const original = { a: 1, b: { x: 2 } };
const deepCopy = JSON.parse(JSON.stringify(original));
original.b.x = 3;
console.log(deepCopy.b.x); // 2 (completamente independente)Desafio
FácilCrie uma função chamada processCart que recebe uma string JSON representando um carrinho de compras. O carrinho contém um array de produtos com nomes e preços. Sua tarefa é:
- Converter a string JSON em um objeto JavaScript
- Criar DOIS carrinhos separados a partir dele
- No segundo carrinho:
- Adicionar uma propriedade
discounteda cada item definida como false - Aplicar um desconto de 10% a todos os itens que possuem
pricemaior que 50 - Definir 'discounted' como true para os itens que receberam o desconto
- Adicionar uma propriedade
- Retornar um array contendo ambos os carrinhos
Folha de consulta
Ao copiar objetos, temos dois tipos de cópias:
- Shallow Copy - copia apenas o primeiro nível
- Deep Copy - copia todos os níveis aninhados
Métodos de Shallow Copy:
Usando o operador spread:
const original = { a: 1, b: { x: 2 } };
const spreadCopy = { ...original };Usando Object.assign():
const assignCopy = Object.assign({}, original);Problema com Shallow Copy:
original.b.x = 3;
console.log(spreadCopy.b.x); // 3 (nested objects share reference)Métodos JSON:
JSON.stringify() converte um objeto JavaScript em uma string JSON:
const obj = { name: "John", age: 30 };
const jsonString = JSON.stringify(obj);
console.log(jsonString); // "{"name":"John","age":30}"JSON.parse() converte uma string JSON de volta para um objeto JavaScript:
const backToObject = JSON.parse(jsonString);
console.log(backToObject); // { name: "John", age: 30 }Deep Copy usando JSON:
const original = { a: 1, b: { x: 2 } };
const deepCopy = JSON.parse(JSON.stringify(original));
original.b.x = 3;
console.log(deepCopy.b.x); // 2 (completely independent)Experimente você mesmo
function processCart(jsonString) {
// Escreva o código aqui
}
// Não escreva nada fora da funçãoEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Strings em Profundidade
Fundamentos de StringsIterar sobre StringsTemplate LiteralsMétodos de StringRecapitulação - String Weaver4JSON Parte 2
Iterar sobre JSONJSON AninhadoEncadeamento Opcional em JSONCópia Rasa e ProfundaRecapitulação - Loja de BicicletasRecapitulação - Sistema Solar7Sistema de Gerenciamento de Biblioteca
Visão Geral do ProjetoAdicionando Livros10Gerenciar Sistema de Festival
Visão Geral do ProjetoAdicionar Filmes e Locais2Arrays Multidimensionais
Fundamentos de Arrays 2DAcessando Elementos de Arrays 2DLoops Aninhados com Arrays 2DRecapitulação - Arrays 2DAdição e Subtração de MatrizesArrays IrregularesArrays 3D e AlémPadrões Comuns de Arrays 2DRecapitulação - Tudo Sobre Arrays5Sets Parte 1
O que é um Set?Iterando sobre SetsAdicionando um elementoRemovendo um elementoVerificando se um elemento existeTamanho e Is EmptyCopy e ClearRecapitulação - O básico de Sets8Tópicos Interessantes sobre Arrays
Desestruturação de ArraysSintaxe Spread em ArraysArrays EsparsosRecapitulação - Workshop de Arrays3JSON Parte 1
O que é um JSON?Verificar se a Chave ExisteMétodos de ObjetoO Spread Operator Parte 1O Spread Operator Parte 2Remover ChavesRecapitulação - Manipular Chaves JSON