Как использовать цикл for / in для передачи свойств объекта?

#javascript #loops #object

#javascript #циклы #объект

Вопрос:

У меня есть вложенный объект, как в примере ниже.

 var posts = {
        "post1": {
            "slug": "slug1",
            "title": "title1",
        },
        "post2": {
            "slug": "slug2",
            "title": "title2",
    }
};
  

Я пытаюсь написать цикл for / in, который позволит мне выполнять итерации по этому объекту.

 var testLoop = function () {
    for (var prop in posts){
        post = prop;
        console.log(post); // Outputs post1 and post2 
        console.log(post.slug); // Outputs undefined
    }
}
  

Как видно выше, я не могу сохранять и позже получать доступ к свойствам каждого итерированного объекта. Сохраняется и регистрируется только имя объекта. Когда я запускаю typeof, я вижу, что это даже не объект, это просто строка.

Как я могу правильно сохранять все повторяющиеся свойства в виде объектов (post1, post2 и т.д.) Во время цикла, Чтобы я мог получить доступ к их свойствам, используя точечную нотацию?

Комментарии:

1. posts[prop].slug

2. Вы можете прочитать о for..in и узнать, что он делает.

Ответ №1:

Когда вы используете

 for (var prop in posts){ ... }
  

Он перебирает строковые ключи в posts объекте.

Главное здесь в том, что prop это будет строка, а не объект, который ожидает ваш текущий код.

Как предположили пользователи в комментариях, поскольку prop ключ объекта представлен в виде строки, вам нужно использовать posts[prop] для ссылки на фактический объект.

Вот немного обновленный код.

 var testLoop = function () {
    for (var prop in posts){
        post = posts[prop]; // ** this is line that needs to be modified **
        console.log(post); // Outputs post object 
        console.log(post.slug); // this should work now
    }
}