Как создать функцию копирования объектов с подставным именем нового объекта?

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

1. Поверхностное копирование:
В этом случае объект будет скопирован только на первом уровне, а все свойства вложенных объектов будут ссылаться на те же самые объекты, что и в исходном объекте. В результате, если изменить вложенный объект в скопированной версии, то изменение также будет отразиться и на исходном объекте.

function shallowCopy(obj, newName) {
  const newObject = {};
  Object.assign(newObject, obj);
  newObject.name = newName;
  return newObject;
}

const originalObject = {
  name: 'John',
  age: 25,
  address: {
    city: 'New York',
    state: 'NY'
  }
};

const copiedObject = shallowCopy(originalObject, 'Jane');
console.log(copiedObject);

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

function deepCopy(obj, newName) {
  const newObject = JSON.parse(JSON.stringify(obj));
  newObject.name = newName;
  return newObject;
}

const originalObject = {
  name: 'John',
  age: 25,
  address: {
    city: 'New York',
    state: 'NY'
  }
};

const copiedObject = deepCopy(originalObject, 'Jane');
console.log(copiedObject);

Важно отметить, что метод JSON.stringify() используется для преобразования исходного объекта в строку JSON, а JSON.parse() преобразует строку JSON обратно в объект. Это позволяет нам глубоко скопировать объект и избежать проблем с ссылками на одни и те же объекты.

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