Obiekt zagnieżdzony

0

Witam, mam taki problem
Mam przykładowo taki obiekt:

var Users = {
  ID: userID,
  FirstName: firstName,
  LastName: lastName
     Data: [
        {
          Address: address,
          City: city
        }
    ]
  }

Tworzę usera dostaje ID, FirstName i LastName, Następnie po zalogowaniu chce dodać dwa kolejne TextInput Address i City
Czyli przed dodaniem Address i City otrzymuję:

{  "ID": 1, "FirstName": Jan,  "LastName": Kowalski, "Data": [{"Address": "", "City": "" }] }

Następnie chcę uzupełnić Address i City z tym, że chcę mieć możliwość dodawania więcej adresów niż jeden.
Przykładowy wynik:

{  "ID": 1, "FirstName": Jan,  "LastName": Kowalski, "Data": [{"Address": "Wspolna 2", "City": "Warszawa", "Address": "Zielona 5", "City": "Warszawa" }] }

Może ktoś pomoże jak dodawać dane w obiekcie zagnieżdżonym ?
Z góry dzieki

1

Cześć, mimo wszystko wolałbym się zastanowić nad konstrukcją obiektu. Może zamiast dodatkowe 'address' warto mieć tam tablicę Addresses ?

Ale ogólnie to tutaj jest przypisywanie zmiennych:

Users['Data'] = {Address: 'Yo2',City: 'Wisconsin' };

Jeżeli chcesz dodać sobie jakiś element to:

Object.assign(Users['Data'], {Address2: 'hihi' });

tyle, że musisz tu zmieniać nazwę dodatkowo.

1

klamerki {} to obiekt.
z kolei nawiasy kwadratowe [] to tablica (która technicznie też jest obiektem w JS, tym niemniej na potrzeby tego problemu można przyjąć, że tablica to coś innego od obiektu)
składnia obiektu:

{
   foo: 123,
   bar: 456
}

składnia tablicy:

[123, 456]
 [{"Address": "Wspolna 2", "City": "Warszawa", "Address": "Zielona 5", "City": "Warszawa" }] }

to tak nie zadziała. W obiekcie każda właściwość może wystąpić tylko raz. Jeśli masz dwa razy taką samą właściwość, to nadpisze starą, czyli:

{ Address: 'Zielona 5', City: 'Warszawa' }

to, co możesz zrobić, to mieć tablicę obiektów:

 [{"Address": "Wspolna 2", "City": "Warszawa"}, {"Address": "Zielona 5", "City": "Warszawa" }] }

zwróc uwagę na to, w których miejscach są klamerki, mamy coś takiego w skrócie:
[{},{}]
czyli tablica zawierająca 2 obiekty.

Następnie chcę uzupełnić Address i City z tym, że chcę mieć możliwość dodawania więcej adresów niż jeden.

Jeśli chcesz później dodać, to robisz tak:

Users.Data.push({Address: "Wspólna 3", City: "Warszawa"});

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push

zakładając mutowalność (w sensie, że zmieniasz obiekt w miejscu)

 FirstName

jest to subiektywne i zależne od języka programowania i konwencji, tym niemniej w JS przyjęło się (większość programistów tak pisze w sensie), że właściwości obiektów pisze się z małej litery, czyli bardziej firstName. Szczególnie, że zmienne już masz w tej konwencji, więc jeśli zmienisz na małe litery na początku, to można będzie zastosować skrót i zamiast:

var Users = {
  id: userID,
  firstName: firstName,
  lastName: lastName,
  data: [
      {
        address: address,
        city: city
      }
  ]
}

napisać:

var Users = {
  id: userID,
  firstName,
  lastName,
  data: [
      {
        address,
        city,
      }
  ]
}

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#property_definitions

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