Back to questions
Middle
2
Как сделать глубокое копирование объекта? Расскажи про structured clone, JSON.stringify, lodash cloneDeep — в чём отличия?
Companies where asked
Data World
Answer from AI
sobes.tech AI
Глубокое копирование объекта — это создание новой структуры данных, полностью независимой от оригинала, включая вложенные объекты.
JSON.stringify / JSON.parse — самый простой способ глубокого копирования, но с ограничениями:
- Не копирует функции, undefined, символы, свойства с типом Symbol.
- Не работает с объектами, содержащими циклические ссылки (выдаст ошибку).
- Преобразует даты в строки.
const copy = JSON.parse(JSON.stringify(original));
_.cloneDeep (lodash) — универсальный метод глубокого копирования, который:
- Копирует почти все типы данных, включая вложенные объекты и массивы.
- Обрабатывает циклические ссылки.
- Не копирует функции (они остаются ссылками).
import _ from 'lodash';
const copy = _.cloneDeep(original);
structuredClone — современный встроенный метод для глубокого клонирования, поддерживаемый в браузерах и Node.js:
- Работает с большинством типов данных, включая Map, Set, Date, RegExp.
- Поддерживает циклические ссылки.
- Не копирует функции и некоторые специальные объекты (например, DOM-элементы).
- Быстрее и надежнее, чем JSON-метод.
const copy = structuredClone(original);
Итог:
- Для простых объектов без функций и циклов можно использовать JSON.
- Для сложных структур с циклами и разными типами — lodash cloneDeep или structuredClone.
- structuredClone — предпочтительный современный способ, если поддержка окружения позволяет.