2016-09-12 10 views
0

私はこれを非常にシンプルなので私自身で解決しようとしていましたが、できませんでした。だから私はただ尋ねることに決めました。私はExpressJS btwを使用しています。"for"ループ内のデータを比較する

私はと呼ばれるMySQLのテーブルには、次のスキーマで「ノート」を持つ:

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

だから、DBからこのデータをフェッチした後、私はこのようなページにそれを持ってしたいと思います:

- unique date 
    - title 
    - body 
    - author 

    - title 
    - body 
    - author 

- unique date 
    - title 
    - body 
    - author 

各行には独自の日付と日付があるため、同じ日付の場合はタイトル、本文、著者、時間のみをページに表示することができます。並べ替えのようなタイムライン。 ため

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

しかし、私は+ = 1つのセット新しい値:私が試した何

は(私のnotes.ejsで)このように、ループ "のために" 内部ノートを比較することです現在のイテレーションでiが表示され、結果が正しく表示されません。

これはおそらく非常に単純ですが、私はそれを正しく理解できません。

+0

ループの場合は、それがクエリの一部として良いだろうように見えます。 – Darthtater

答えて

0

あなたは確かに、テンプレート内でこれを行うことができますが、私は実際にそれを示唆しています。私はむしろビュー/ templaterにそれを渡す前に、マージ/グループ化を行うのを見るでしょう。

テンプレーターの外側のアンダースコア/ロダッシュにアクセスできますか? _.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> 
<%} %> 
+0

これは良い提案ですが、答えが現在どのように構造化されているかというコメントとしてよく分かります。 – peteb

+1

ありがとう@dvlsg!アンダースコアについては決して知らなかった。また、テンプレートで直接作業するのはちょっと奇妙だと分かっていましたが、自分で試してみたかったのです。 – MerkisL

+0

十分に公正な - 私は間違いなくあなたのものと同じようなロジックを過去の私の見解に入れました。それはまた私をかむために戻ってきたので、私は私の推薦を与えたのです。 :)また、[lodash](https://lodash.com/docs/4.15.0)を見ることができます。これは基本的には少し余分に強調されています(それより少し複雑ですが、それはその要点です)。 – dvlsg

0

I + 1に新しい値を設定することなく、プラスの値を取得する方法である私

関連する問題