Sobes.tech
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 — предпочтительный современный способ, если поддержка окружения позволяет.