Javascript как сделать копию объекта

Узнайте, как легко и быстро скопировать объекты в Javascript с помощью методов Object.assign() или спред оператора. Примеры использования и преимущества использования этих методов.

Клонирование объекта в JavaScript

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

Существует несколько способов для клонирования объекта. Наиболее распространённый способ - это использование стандартной функции Object.assign(), которая позволяет копировать все свойства из одного или нескольких объектов в новый объект. Этот способ прост и эффективен, и подходит для клонирования простых объектов.


// Исходный объект
const obj = {
  name: 'John Doe',
  age: 20
};

// Клонированный объект
const clone = Object.assign({}, obj);

Этот способ подходит для клонирования простых объектов, но не подходит для клонирования объектов со сложными свойствами, например с вложенными объектами или массивами. Для клонирования таких объектов можно использовать функцию JSON.parse() и JSON.stringify().


// Исходный объект
const obj = {
  name: 'John Doe',
  age: 20,
  address: {
    street: '123 Main St',
    city: 'Los Angeles',
    state: 'CA'
  }
};

// Клонированный объект
const clone = JSON.parse(JSON.stringify(obj));

Функция JSON.stringify() преобразует объект в строку, а функция JSON.parse() преобразует строку обратно в объект. Этот способ подходит для глубокого клонирования любого объекта.

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


function clone(obj) {
  let clone = {};

  for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
      if (obj[key] != null &&  typeof(obj[key]) == "object")
        clone[key] = clone(obj[key]);
      else
        clone[key] = obj[key];
    }
  }

  return clone;
}

// Исходный объект
const obj = {
  name: 'John Doe',
  age: 20,
  address: {
    street: '123 Main St',
    city: 'Los Angeles',
    state: 'CA'
  }
};

// Клонированный объект
const clone = clone(obj);

Как видно из примера, функция clone() проходит все свойства объекта и проверяет, являются ли они вложенными объектами или массивами. Если свойство является вложенным объектом или массивом, то функция clone() вызывает саму себя рекурсивно для клонирования такого объекта. Если свойство не является вложенным объектом, то просто присваивается новому объекту.

Ответы (0)