Руководство по глубокому копированию объектов JavaScript: изучение различных методов

При работе с объектами JavaScript вы можете столкнуться с ситуациями, когда вам необходимо создать копию объекта, также известную как глубокое копирование. Глубокое копирование гарантирует дублирование всех вложенных свойств и значений, предотвращая любые непреднамеренные ссылки на исходный объект. В этой статье мы рассмотрим различные методы глубокого копирования в JavaScript, приведя попутно примеры кода.

Метод 1: использование оператора расширения (…)
Оператор расширения — это краткий и популярный метод создания поверхностных копий объектов. Однако при использовании с вложенными объектами создается только поверхностная копия. Чтобы добиться глубокого копирования, вам необходимо рекурсивно применить оператор распространения к каждому вложенному объекту. Вот пример:

const originalObj = { 
  name: "John",
  age: 25,
  address: {
    street: "123 Main St",
    city: "New York"
  }
};
const deepCopyObj = {
  ...originalObj,
  address: { 
    ...originalObj.address 
  }
};

Метод 2: использование JSON.parse() и JSON.stringify()
Другой подход к глубокому копированию объектов JavaScript — использование методов JSON: JSON.parse()и JSON.stringify(). Этот метод преобразует объект в строку JSON, а затем анализирует его обратно в новый объект. Вот пример:

const originalObj = {
  name: "John",
  age: 25,
  address: {
    street: "123 Main St",
    city: "New York"
  }
};
const deepCopyObj = JSON.parse(JSON.stringify(originalObj));

Метод 3: использование рекурсивной функции
Рекурсивная функция позволяет перебирать исходный объект, создавая глубокую копию на каждом уровне. Этот метод особенно полезен при работе со сложными структурами объектов. Вот пример:

function deepCopy(obj) {
  if (typeof obj !== "object" || obj === null) {
    return obj; // Return the value if it's not an object
  }
  const copy = Array.isArray(obj) ? [] : {};
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      copy[key] = deepCopy(obj[key]);
    }
  }
  return copy;
}
const originalObj = {
  name: "John",
  age: 25,
  address: {
    street: "123 Main St",
    city: "New York"
  }
};
const deepCopyObj = deepCopy(originalObj);

В этой статье мы рассмотрели различные методы глубокого копирования объектов JavaScript. Мы рассмотрели использование оператора распространения, методов JSON и рекурсивной функции. Каждый метод имеет свои преимущества и особенности, поэтому выберите тот, который лучше всего соответствует вашим требованиям. Поняв эти методы, вы сможете создавать надежные и независимые копии ваших объектов JavaScript.

Помните, что глубокое копирование необходимо, если вы хотите избежать непреднамеренных ссылок и сохранить целостность данных. Используйте соответствующий метод в зависимости от сложности вашего объекта и уровня вложенности. Приятного кодирования!