Свойство не определено в for...in loop, но я могу получить к нему доступ вручную

Я определяю объект следующим образом:

let users = {
  Alan: {
    age: 27,
    online: false
  },
  Jeff: {
    age: 32,
    online: true
  },
  Sarah: {
    age: 48,
    online: false
  },
  Ryan: {
    age: 19,
    online: true
  }
};

Затем я прохожу через это и получаю имена обратно, чего я и ожидаю:

for (user in users) {
    console.log(user);
}

// Alan
// Jeff
// Sarah
// Ryan

затем я делаю это и получаю неопределенное значение четыре раза

for (user in users) {
  console.log(user.age);
}
// undefined
// undefined
// undefined
// undefined

Тогда я делаю ЭТО, и я могу получить доступ к возрасту собственности

users.Alan.age

Что здесь происходит??

2 ответа

Вам нужно ссылаться на значение из объекта, а не ключа. Вы можете выбрать пользователя из объекта users, а затем указать возраст.

for (user in users) {
  console.log(users[user].age);
}

Было бы более стандартным сделать пользователей таким массивом:

let users = [
  {
    name: 'Alan',
    age: 27,
    online: false
  },
  {
    name: 'Jeff',
    age: 32,
    online: true
  },
  {
    name: 'Sarah',
    age: 48,
    online: false
  },
  {
    name: 'Ryan',
    age: 19,
    online: true
  }
];

Я думаю, что это, вероятно, "действовать" так, как вы ожидаете. (Где каждый элемент объекта users является объектом.)

Другие вопросы по тегам