Jak skopiować obiekt w jsie tak aby wskazywał na inną referencję? Czy oprócz spread operatora i użycia metody Object.assign()
istnieje jeszcze jakiś inny sposób?
sajek587 napisał(a):
Czy oprócz spread operatora i użycia metody
Object.assign()
istnieje jeszcze jakiś inny sposób?
A przeszkadza Ci coś w tych dwóch podejściach?
Możesz je zserializować i zdeserializować, np robiąc a = JSON.parse(JSON.stringify(a))
, ale to jest duży performance-overhead, i niektórych rzeczy się w ten sposób nie da skopiować, np circular-references.
Tak po prostu byłem ciekaw czy istnieje inny sposób jeszcze
Jakiś czas temu (nie mogę znaleźć informacji w dokładnie, której wersji) została wprowadzona funkcja structuredClone
, która robi "głębokie kopiowanie" (deep copy)
https://developer.mozilla.org/en-US/docs/Web/API/structuredClone
A jaki sposób zalecacie na robienie kopii głębokiej dla zagnieżdżonego obiektu? Wykrozystanie metody JSON.parse i JSON.stringify albo użycie funkcji structuredClone?
sajek587 napisał(a):
A jaki sposób zalecacie na robienie kopii głębokiej dla zagnieżdżonego obiektu? Wykrozystanie metody JSON.parse i JSON.stringify albo użycie funkcji structuredClone?
Object.assign()
oraz {...}
.
Chociaż teraz mi się od razu pojawia pytania po co chcesz robić kopię?
Ja ostatnio korzystałem z lodasha bo i tak potrzebowałem czegoś zeby porównać dwa obiekty ze sobą. Jest dostępna metoda cloneDeep
Użyłbym jakiejś lekkiej libki.
Nie lodasha, bo to ciężka krowa i generalnie muzeum w 2023.