Как я могу реорганизовать свой код просмотра для отображения элементов в год? - PullRequest
0 голосов
/ 07 ноября 2018

Я хотел бы реорганизовать кусок кода, чтобы отображать / перегруппировать мои элементы в год, не повторяя код для каждого года. На данный момент я пробовал циклы в течение ряда лет, но, похоже, это не сработало.

Вот фрагмент кода, который я сейчас повторяю в файле 'view' (шаблон ejs) в течение 8 разных лет:

<ul><h3>YEAR 2017:</h3>
 <% items.forEach(function(el){ %>
  <% if(el.date.substring(7, 11) == "2017"){ %>
   <li><%= el.date %>: 
   <% if(el.url){ %>
    <a href="<%= el.url %>" title="<%= el.title %>"><%= el.title %></a>,
   <% }else{ %> 
    <%= el.title %>,
   <% } %>
   <% if(el.by){ %>
    <%= el.type %>, <%= el.by %>
   <% }else{ %>
    <%= el.type %>
   <% } %>
   @ <%= el.location %></li>
  <% } %>
 <% }); %>
</ul>

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

может быть, как это, пожалуйста, преобразуйте в синтаксис eje:

let arr = []

let arrEl = items.map(function(el, index){
  return el.date.substring(7, 11);
})
arr.push(arrEl)

for (let i=0; i<arr.length; i++){
  items.map(function(element, index){
    if(el.date.substring(7, 11) == arr[i]){
      //show your el
    }
  })
}
0 голосов
/ 07 ноября 2018

Похоже, вы уже на правильном пути, используя шаблон ejs и массив. Может быть, вам следует реструктурировать способ передачи элементов, чтобы они были в массиве объектов, например

items = [{"year": 2016, "items": [item1, item2 ...]}, {"year": 2017, "items": [item1, item2 ..]}, ... ]

Тогда вы можете просмотреть их следующим образом:

<% items.forEach(function(year){ %>
    <ul><h3>YEAR <%= year.year %>:</h3>
        <% year.items.forEach(function(el){ %>
        ...
        <% } %>
<% } %>
...