отображение вложенных ключей в шаблоне

#javascript #node.js #pug

#javascript #node.js #pug

Вопрос:

у меня есть сгруппированный массив, который я хочу отобразить во внешнем интерфейсе через PUG, и это оказывается немного сложным

вот массив

 {
    "Apr 14th 19": {
        "5:00 PM": [
            {
                "name": "John",
                "message": "Hey there"
            },
            {
                "name": "Josh",
                "message": "Hey"
            }
        ]
    },
    "Apr 15th 19": {
        "5:00 PM": [
            {
                "name": "Jake",
                "message": "Hey you"
            }
        ]
    }
    }
 

вот мой код pug, который я пытаюсь использовать для рендеринга нужного мне шаблона (желаемый результат ниже)

 each day in Data
    each hour in day
        each entry in hour
            h2= "The date is"   Object.keys(day)
            h2= "The time is"   Object.keys(hour)
            h2= "The message is"   entry.message 
 

вид вывода шаблона, который я хочу

 The date is Apr 14th 19
The time is 5:00 pm
The message is : Hey
The message is : Hey you
(Both messages here because those are 2 nested under under the times)
 

ничего из этого на самом деле не работает, мне действительно нужна помощь

Ответ №1:

Вы захотите сделать что-то в этом роде в своем шаблоне Pug:

 each dayObj, day in Data
    h2= "The date is "   day
    each hourObj, hour in dayObj
        h2= "The time is "   hour
        each entry in hourObj
            h2= "The message is : "   entry.message
 

Вот рабочая ручка: https://codepen.io/chanceaclark/pen/JVpmMd

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

1. работает отлично, хотя один вопрос — добавление Obj после ‘day’ дает доступ к самому ключу?

2. pugjs.org/language/iteration.html В примерах в разделе Итерации Pug показано, что значение является первым элементом, а индекс / ключ — второй переменной. Вы использовали только значение, которое было вложенным объектом, вместо индекса / ключа объекта. Я просто переименовал первую переменную и добавил индекс / ключ в качестве имени, которое у вас было.