如何重构“查看”代码以每年显示项目?

时间:2018-11-07 16:45:04

标签: javascript express mongoose ejs

我想重构一段代码,以便每年显示/重新组合我的商品,而不必每年重复代码。截至目前,我已经尝试遍历了很多年,但似乎没有效果。

这是我当前在“视图”文件(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 :(得分:2)

通过使用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){ %>
        ...
        <% } %>
<% } %>

答案 1 :(得分:0)

也许是这样,请转换为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
    }
  })
}