Если необходимо полностью скопировать сложную структуру данных, например, массив с объектами, то нужно делать глубокое (deep) или полное копирование данных. JavaScript не содержит функций для глубокого копирования, лучший вариант сделать глубокую копию — сериализовать структуру в JSON и тут же распарсить.

Глубокое копирование, используя методы JSON
const myObj = {
  one: 1,
  two: 2,
  three: 3,
}
 
const newObj = JSON.parse(JSON.stringify(myObj))
 
console.log(myObj === newObj)
// false
Глубокое копирование. Важно!

Данный метод не подойдет если в Вашем объекте присутствует структуры данных MapSet, классы типа DateInfinityundefined, функции, типизированные массивы…

const myObj = {
  boolean: true,
  string: "строка",
  number: 12345,
  nul: null,
  undfd: undefined,
  inf: Infinity,
  date: new Date(),
  func: () => console.log("функция"),
}
 
const newObj = JSON.parse(JSON.stringify(myObj))
 
console.log(newObj)
// {
//  "boolean": true,
//  "string": "строка",
//  "number": 12345,
//  "nul": null,
//  "inf": null,
//  "date": "2020-08-28T22:06:14.982Z"
// }
structuredClone(value)

Глобальный метод structuredClone(value) создаёт глубокую копию объекта .

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

structuredClone(value)
structuredClone(value, options)

Назад