Какие существуют копии объектов Flashcards

1
Q

Какие существуют копии объектов?

A

//spread operator
Однако есть нюанс при использовании spread оператора. Если у нас при копировании через спред оператор более сложная структура условно не примитивные данные внутри, а что-то сложнее например вложенные массивы\объекты, то уже начинаются проблемы, так как spread оператор у нас копирует поверхностно. Это означает, что сам объект копируется, но его вложенные объекты или элементы могут оставаться ссылками на исходные объекты, а не создавать глубокие копии каждого элемента.
const user2 = {…user1}
- копирует массив объектов, в результате чего не изменяется исходный
- копирует один уровень вложенности

Если при глубокой вложенности
const superCopy2 = {…superUser, address: {…superUser.address}, city: “Minsk”>}

//structuredCloneCopy
Если необходимо полностью скопировать сложную структуру данных, например, массив с объектами, то нужно делать глубокое (deep) или полное копирование данных. JavaScript включает функцию structuredClone(), которая позволяет выполнять глубокое копирование сложных структур данных. Доступна nodeJS начиная с 17 версии

const structuredCloneCopy = structuredCloneCopy(superUser) - объект, который мы хотим изменить
structuredCloneCopy.address.geo.lat = ‘structered clone test value’

Новая функция и нельзя поменять версию nodeJS -трудозатратно.

//loodash библиотека
Можно воспользоваться готовой библиотекой. Например, функцию глубокого копирования содержит популярная библиотека утилит lodash. Функция гарантировано работает в подавляющем большинстве случаев, потому что используется в десятках тысяч проектов каждый день. Исходный код библиотеки открыт, можно изучить исходный код функции глубокого копирования.

import cloneDeep from ‘lodash.clonedeep’

const deep = cloneDeep(itemsInCart)
console.log(itemsInCart[1] === deep[1])
// false

How well did you know this?
1
Not at all
2
3
4
5
Perfectly