Jak skopiować obiekt?

0

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?

3
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.

0

Tak po prostu byłem ciekaw czy istnieje inny sposób jeszcze

2

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

0

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?

0
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ę?

2

Ja ostatnio korzystałem z lodasha bo i tak potrzebowałem czegoś zeby porównać dwa obiekty ze sobą. Jest dostępna metoda cloneDeep 🙂

0

Użyłbym jakiejś lekkiej libki.

Nie lodasha, bo to ciężka krowa i generalnie muzeum w 2023.

1 użytkowników online, w tym zalogowanych: 0, gości: 1