Какие существуют копии объектов Flashcards
Какие существуют копии объектов?
//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