Если необходимо полностью скопировать сложную структуру данных, например, массив с объектами, то нужно делать глубокое (deep) или полное копирование данных. JavaScript не содержит функций для глубокого копирования, лучший вариант сделать глубокую копию — сериализовать структуру в JSON и тут же распарсить.
Глубокое копирование, используя методы JSON
const myObj = {
one: 1,
two: 2,
three: 3,
}
const newObj = JSON.parse(JSON.stringify(myObj))
console.log(myObj === newObj)
// false
Глубокое копирование. Важно!
Данный метод не подойдет если в Вашем объекте присутствует структуры данных Map
, Set
, классы типа Date
, Infinity
, undefined
, функции, типизированные массивы…
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)