比较 "for" 循环内的数据
Comparing data inside "for" loop
所以我一直在尝试自己解决这个问题,因为它看起来很简单,但我做不到,而且这里也没有任何可以帮助我解决的问题。所以我决定问问。顺便说一句,我正在使用 ExpressJS。
我有 MySQL table 调用 'notes' 具有以下架构:
+----------+
| Field |
+----------+
| id |
| title |
| body |
| author |
| date |
| time |
+----------+
因此,从数据库中获取这些数据后,我希望将其放在这样的页面上:
- unique date
- title
- body
- author
- title
- body
- author
- unique date
- title
- body
- author
由于每一行都有自己的日期,有些文章的日期是相同的,我只想在页面上只显示一次日期,如果日期相同,则只显示标题、body、作者和时间.有点像时间线。
我尝试的是在 "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 设置了新值,我无法正确显示结果。
这可能很简单,但我就是做不对。
i+1 是在不将新值设置为 i
的情况下获得加一值的方法
您当然可以在模板中执行此操作,但我真的不建议这样做。我宁愿看到你在将它传递给视图/模板之前进行合并/分组。
您可以在模板程序之外访问下划线/lodash 吗? _.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>
<%} %>
所以我一直在尝试自己解决这个问题,因为它看起来很简单,但我做不到,而且这里也没有任何可以帮助我解决的问题。所以我决定问问。顺便说一句,我正在使用 ExpressJS。
我有 MySQL table 调用 'notes' 具有以下架构:
+----------+
| Field |
+----------+
| id |
| title |
| body |
| author |
| date |
| time |
+----------+
因此,从数据库中获取这些数据后,我希望将其放在这样的页面上:
- unique date
- title
- body
- author
- title
- body
- author
- unique date
- title
- body
- author
由于每一行都有自己的日期,有些文章的日期是相同的,我只想在页面上只显示一次日期,如果日期相同,则只显示标题、body、作者和时间.有点像时间线。
我尝试的是在 "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 设置了新值,我无法正确显示结果。
这可能很简单,但我就是做不对。
i+1 是在不将新值设置为 i
的情况下获得加一值的方法您当然可以在模板中执行此操作,但我真的不建议这样做。我宁愿看到你在将它传递给视图/模板之前进行合并/分组。
您可以在模板程序之外访问下划线/lodash 吗? _.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>
<%} %>