Я потратил некоторое время, чтобы собрать всю возможную информацию о клонировании объекта JavaScript. Я решил написать это, чтобы облегчить другим. Я не буду вдаваться в подробности в этом блоге, учитывая, что у вас есть базовые знания о том, как объекты.

Для объектов JavaScript может быть два типа клонов:
1) Поверхностный клон: объект клонируется, но ссылка на объект остается прежней, следовательно, изменение в clonedObject приводит к изменению в исходный объект тоже.
2) Глубокое клонирование: объект полностью клонируется. Даже вложенные объекты клонируются, и не остается ссылки на исходный объект, поэтому любые изменения в clonedObject не влияют на исходный объект.

Мелкий клон

  1. Использование библиотеки lodash -> const targetObj = lodash.clone(sourceObj)
  2. Object.assign(targetObj, sourceObj)
  3. Использование оператора распространения -› const targetObj = {…sourceObj}
    Может также использоваться для объединения двух объектов (Shallow)
    const mergedObj = {…sourceObj1, …sourceObj2}

Глубокий клон

  1. Использование библиотеки lodash -> const targetObj = lodash.deepClone(sourceObj)
  2. Итерация по свойству объекта и клонирование одного за другим в новый объект с использованием рекурсии для вложенного объекта. (Это также может быть вопрос интервью)

3. const targetObj = JSON.parse(JSON.stringify(sourceObj))
SourceObj в этом случае не должен содержать Date, regex, functions, map и т.д.

Самый надежный и рекомендуемый способ — использовать библиотеку Lodash, которая хорошо протестирована и охватывает большинство крайних случаев.

Отправьте письмо по адресу [email protected], если у вас есть какой-либо другой новый способ.