Angular 7 - obiekt się nadpisuje mimo iż tworzę nowy

0

Witam.
Moja aplikacja ma opcję wyboru towaru z modalowego okienka. Po kliknięciu na checkbox wywołuję tę funkcję:

  multiSelectProduct(product: any) {
    const prod = product;
    prod.twr_Ilosc = 1;
    prod.twr_Wartosc = prod.twr_Cena * prod.twr_Ilosc;
    this.selectedProducts.push(prod);
  }

Mimo, iż tworze nowy obiekt prod to dane obiektu product się nadpisują. Na skrinach widać, że przed wybraniem ilość była 2 szt., a po wybraniu 1 szt., ponieważ to logiczne, że ktoś chce jedną sztukę na start, a nie cały stan magazynowy.
Dlaczego tak się dzieje i co mogę zrobić żeby się to nie nadpisywało?

2

W ten sposób przypisujesz obiekt razem z referencją, stąd później nadpisujesz też bazowy obiekt. Z tego co na szybko bym spróbował to tym "hackiem":

const prod= JSON.parse(JSON.stringify(product));
0

Jeszcze wiele nauki przede mną. Dzięki, działa elegancko

2

Musisz tez pamietac o tym jaka jest roznica pomiedzy shallow copy i deep clone czyli za pomoca:

JSON.parse(JSON.stringify(product));

Robisz deep clone czyli kopiujesz tez nested object (oczywiscie same value) za pomoca Object.assign lub

const newObj = { ...oldObj }

Robisz shallow copy czyli kopiujesz tylko object ale juz nested object bede zawsze referencja

0

W obiektach, na których pracuje nie ma nested objects, nie ma funkcji. Tylko property różnego typu z czego w tym przypadku nie wszystkie mi są potrzebne, ale tym się zajmę później.

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