Menu
Coddy logo textTech

Поверхностное и глубокое копирование

Часть раздела Логика и поток путешествия по JavaScript на Coddy. Урок 25 из 65.

При копировании objects существуют два типа копий:

  1. Поверхностная копия — копирует только первый уровень
  2. Глубокая копия — копирует все вложенные уровни nested

Методы поверхностного копирования:

Использование оператора расширения:

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

Использование Object.assign(), который создаёт новый объект, копируя свойства из исходного объекта в целевой:

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

Проблема с поверхностным копированием:

original.b.x = 3;
console.log(spreadCopy.b.x); // 3
// (вложенные объекты разделяют ссылку)

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

Понимание методов JSON и глубокого копирования

JSON.stringify() преобразует объект JavaScript в строку JSON:

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

JSON.parse() преобразует строку JSON обратно в объект JavaScript:

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

Глубокое копирование с использованием 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 (полностью независимый)
challenge icon

Задание

Легко

Create функцию с именем processCart, которая принимает JSON string, представляющий shopping cart. В cart содержится массив продуктов с названиями и ценами. Твоя задача:

  1. Parse JSON string в JavaScript object
  2. Create ДВЕ отдельные cart
  3. Во второй cart:
    1. Добавить свойство discounted к каждому элементу и установить его в false
    2. Применить скидку 10% ко всем элементам, у которых price больше 50
    3. Установить 'discounted' в true для элементов, получивших скидку
  4. return массив, содержащий обе cart
REQUIRED OUTPUT FORMAT: [Your translated content here]

Попробуйте сами

function processCart(jsonString) {
    // Напишите код здесь
}
// Не пишите ничего вне функции
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и поток

Потренируйтесь самостоятельно: Онлайн-компилятор JavaScript