Copia superficiale e profonda
Fa parte della sezione Logica e flusso del percorso JavaScript di Coddy. Lezione 25 di 65.
Quando copiamo gli oggetti, abbiamo due tipi di copie:
- Copia superficiale - copia solo il primo livello
- Copia profonda - copia tutti i livelli annidati
Metodi di copia superficiale:
Utilizzo dell'operatore spread:
const original = { a: 1, b: { x: 2 } };
const spreadCopy = { ...original };Usando Object.assign(), che crea un nuovo oggetto copiando le proprietà dall'oggetto sorgente a quello di destinazione:
const assignCopy = Object.assign({}, original);Problema con la copia superficiale:
original.b.x = 3;
console.log(spreadCopy.b.x); // 3
// (gli oggetti annidati condividono lo stesso riferimento)
console.log(assignCopy.b.x); // 3Capire i metodi JSON & la copia profonda
JSON.stringify() converte un oggetto JavaScript in una stringa JSON:
const obj = { name: "John", age: 30 };
const jsonString = JSON.stringify(obj);
console.log(jsonString); // "{"name":"John","age":30}"JSON.parse() converte una stringa JSON di nuovo in un oggetto JavaScript:
const backToObject = JSON.parse(jsonString);
console.log(backToObject); // { name: "John", age: 30 }Copia profonda 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 indipendente)Sfida
FacileCrea una funzione chiamata processCart che accetta una stringa JSON che rappresenta un carrello della spesa. Il carrello contiene un array di prodotti con nomi e prezzi. Il tuo compito è:
- Analizzare la stringa JSON e convertirla in un oggetto JavaScript
- Creare DUE carrelli separati a partire da essa
- Nel secondo carrello:
- Aggiungere a ogni elemento una proprietà
discountedimpostata su false - Applicare uno sconto del 10% a tutti gli elementi che hanno
pricemaggiore di 50 - Impostare 'discounted' su true per gli elementi che hanno ricevuto lo sconto
- Aggiungere a ogni elemento una proprietà
- Restituire un array contenente entrambi i carrelli
Provalo tu
function processCart(jsonString) {
// Scrivi il codice qui
}
// Non scrivere nulla al di fuori della funzioneQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Fondamenti delle stringheIterare sulle stringheTemplate literalsMetodi delle stringheRiepilogo - Intrecciatore di stringhe4JSON Parte 2
Iterare su JSONJSON annidatoOptional chaining in JSONCopia superficiale e profondaRipasso - Negozio di bicicletteRipasso - Sistema solare7Sistema di gestione della biblioteca
Panoramica del progettoAggiungere libri10Gestire il sistema del festival
Panoramica del progettoAggiungere film e sale2Array multidimensionali
Nozioni di base sugli array 2DAccesso agli elementi di un array 2DCicli annidati con array 2DRipasso: array 2DAddizione e sottrazione di matriciArray frastagliatiArray 3D e oltreSchemi comuni con array 2DRipasso: tutto sugli array5Insiemi Parte 1
Che cos'è un insieme?Iterare sugli insiemiAggiungere un elementoRimuovere un elementoVerificare se un elemento esisteDimensione e verifica del vuotoCopiare e svuotareRiepilogo - Nozioni di base sugli insiemi8Argomenti interessanti sugli array
Destrutturazione degli arraySintassi spread negli arrayArray sparsiRiepilogo - Laboratorio sugli array3JSON Parte 1
Che cos'è JSON?Verificare se una chiave esisteMetodi degli oggettiL'operatore spread Parte 1L'operatore spread Parte 2Rimuovere le chiaviRipasso - Manipolare le chiavi in JSONEsercitati da solo: Compilatore JavaScript online