因此,我一直在尝试自己解决这个问题,因为它看起来非常简单,但是我做不到,没有什么可以帮助我解决这个问题的。所以我决定只问。我正在使用ExpressJS btw。

我有一个名为“ notes”的MySQL表,具有以下架构:

+----------+
| Field    |
+----------+
| id       |
| title    |
| body     |
| author   |
| date     |
| time     |
+----------+


因此,从db获取此数据后,我希望将其放在这样的页面上:

- unique date
    - title
    - body
    - author

    - title
    - body
    - author

- unique date
    - title
    - body
    - author


由于每一行都有自己的日期,某些文章的日期是相同的,所以我只想在页面上只显示一次日期,如果日期相同,则只显示标题,正文,作者和时间。有点像时间表。

我尝试过的是比较“ for”循环中的注释,如下所示(在我的notes.ejs中):

<% for(i=0; i<notes.length; i++) {%>
    <% if(notes[i].date != notes[i+=1].date) {%>
       <li><%= notes[i].title %></li>
    <%} %>
<%} %>


但是,i + = 1在当前迭代中为i设置了新值,并且我无法正确显示结果。

这可能很简单,但是我做对了。

最佳答案

您当然可以在模板中执行此操作,但是我真的不建议这样做。我希望看到您先进行合并/分组,然后再将其传递给视图/模板器。

您可以在模板程序之外访问下划线/破折号吗? _.groupBy()对于此类问题非常理想。

// this assumes that your sql results are actual dates.
// if they aren't, skip the `toISOString()`
let grouped = _.groupBy(sqlResults, result => result.date.toISOString());
let dates = _.unique(sqlResults.map(result => result.date.toISOString()));
// or just read dates from the `grouped` keys, if you dont want them separately
let data = { grouped, dates };
return res.render('view.ejs', data);


使用模板(或类似的东西):

<% for (let date of dates) {%>
  <h4><%= date %></h4>
  <ul>
    <% for (let obj of grouped[date]) {%>
      <li><%= obj.title %></li>
    <%} %>
  </ul>
<%} %>

关于mysql - 比较“for”循环中的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39455006/

10-09 13:05