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

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.

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))
    }
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.

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?

2

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

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)

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)

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:

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);)

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

tylko że w tej formie

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:

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

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