Menu
Coddy logo textTech

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:

  1. Shallow Copy - copia apenas o primeiro nível
  2. 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); // 3

Entendendo 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)
challenge icon

Desafio

Fácil

Crie 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 é:

  1. Converter a string JSON em um objeto JavaScript
  2. Criar DOIS carrinhos separados a partir dele
  3. No segundo carrinho:
    1. Adicionar uma propriedade discounted a cada item definida como false
    2. Aplicar um desconto de 10% a todos os itens que possuem price maior que 50
    3. Definir 'discounted' como true para os itens que receberam o desconto
  4. 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ção
quiz iconTeste seus conhecimentos

Esta 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