Jakim sposobem do user.id wpisuje się wartość z kluczem id?

Jakim sposobem do user.id wpisuje się wartość z kluczem id?
K8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 112
0

Jakim sposobem do user.id wpisuje się wartość z kluczem id skoro po key przechodzimy w pętli? Obiekt, który pobieram ma takie pola jak username, lastname, id, email itd.

Kopiuj
created() {
      axios.get('https://vue-update-9ddf7.firebaseio.com/users.json')
        .then(res => {
          console.log(res);
          const data = res.data;
          const users = [];
          for(let key in data) {
            const user = data[key];
            user.id = key;
            users.push(user);
          }
          console.log(users);
          this.email = users[0].email;
        })
        .catch(error => console.log(error))
    }
ŁF
  • Rejestracja: dni
  • Ostatnio: dni
1

Przecież sam tę wartość przypisujesz. Pętla nie ma nic do rzeczy.
Robisz user.id = key, key zawiera pewną wartość, user.id jest zmienną (właściwość id obiektu user), zatem przypisujesz wartość do zmiennej.

K8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 112
0
ŁF napisał(a):

Przecież sam tę wartość przypisujesz. Pętla nie ma nic do rzeczy.
Robisz user.id = key, key zawiera pewną wartość, user.id jest zmienną (właściwość id obiektu user), zatem przypisujesz wartość do zmiennej.

ale to skąd wiadomo, którą wartość key zostanie przypisana skoro pętla przechodzi po wszystkich key'ach?

ŁF
  • Rejestracja: dni
  • Ostatnio: dni
2

Po pierwsze przypisujesz wartość, a nie referencję, po drugie key jest nadpisywane "całe", a nie modyfikowane jedno z jego pól.

Kopiuj
var a = 1, b = a;
a = 2;
console.log(b);

Co się wypisze na konsoli?

Teraz do pogimnastykowania głowy - co się wypisze na konsoli w każdym z przypadków?
1a)

Kopiuj
var a = { value: 1 }, b = a;
a.value = 2;
console.log(b.value);

Podpowiem, że b kopią referencji do a, ale w jednym przypadku masz zmieniany cały obiekt (więc drugi obiekt trzyma oryginalną referencję), w drugim tylko jego pole.
1b)

Kopiuj
var a = { value: 1 }, b = a;
a = { value: 2 };
console.log(b.value);

2) Zgaduję, że sądzisz, że masz do czynienia właśnie z tym problemem:

Kopiuj
for (var b = 0; b < 2; b++)
    setTimeout(() => console.log(b));

3) tymczasem masz do czynienia z tym (a tak upewnisz się, że po drodze b otrzyma też wartość 0: for (var a = 0; a < 2; a++) { c = b; b = a; } console.log(c, b);)

Kopiuj
for (var a = 0; a < 2; a++)
    b = a;
console.log(b);

tylko że w tej formie

Kopiuj
b = [ { key:-1 }, { key: -1 } ];
for (var i = 0; i < 2; i++)
    b[i].key = i;
console.log(b[0].key, b[1].key); // będzie 1,1, czy 0,1, czy 0,0?

4) A tu tak dla przypalenia zwojów mózgowych:

Kopiuj
for (let b = 0; b < 2; b++)
    setTimeout(() => console.log(b));

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.