Menu
Coddy logo textTech

Płytka i głęboka kopia

Część sekcji Logika i przepływ programu ścieżki JavaScript w Coddy. Lekcja 25 z 65.

Podczas kopiowania obiektów mamy dwa rodzaje kopii:

  1. Kopia płytka — kopiuje tylko pierwszy poziom
  2. Kopia głęboka — kopiuje wszystkie zagnieżdżone poziomy

Metody płytkiego kopiowania:

Używając operatora roz spread:

const original = { a: 1, b: { x: 2 } };
const spreadCopy = { ...original };

Używanie Object.assign(), które tworzy nowy obiekt przez kopiowanie właściwości z obiektu źródłowego do docelowego:

const assignCopy = Object.assign({}, original);

Problem z płytką kopią:

original.b.x = 3;
console.log(spreadCopy.b.x); // 3
// (obiekty zagnieżdżone współdzielą referencję)

console.log(assignCopy.b.x); // 3

Poznawanie metod JSON i głębokiego kopiowania

JSON.stringify() konwertuje obiekt JavaScript na ciąg JSON:

const obj = { name: "John", age: 30 };
const jsonString = JSON.stringify(obj);
console.log(jsonString); // "{"name":"John","age":30}"

JSON.parse() konwertuje ciąg JSON z powrotem na obiekt JavaScript:

const backToObject = JSON.parse(jsonString);
console.log(backToObject); // { name: "John", age: 30 }

Głęboka kopia przy użyciu 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 (całkowicie niezależna)
challenge icon

Wyzwanie

Łatwy

Utwórz funkcję o nazwie processCart, która przyjmuje łańcuch znaków JSON reprezentujący koszyk zakupowy. Koszyk zawiera tablicę produktów z nazwami i cenami. Twoje zadanie:

  1. Przekształć łańcuch znaków JSON w obiekt JavaScript
  2. Utwórz z niego DWA osobne koszyki
  3. W drugim koszyku:
    1. Dodaj do każdego elementu właściwość discounted ustawioną na false
    2. Zastosuj 10% zniżki do wszystkich elementów, których price jest większe niż 50
    3. Ustaw 'discounted' na true dla elementów, które otrzymały zniżkę
  4. Zwróć tablicę zawierającą oba koszyki

Spróbuj swoich sił

function processCart(jsonString) {
    // Napisz kod tutaj
}
// Nie pisz niczego poza funkcją
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator JavaScript online