質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
EJS

EJSは、JavaScript用のテンプレートエンジン。HTMLなどのテンプレートテキストにJavaScriptのロジックを記述することができます。また、変数・関数の実行をテンプレートテキスト内に埋め込むことも可能です。

Q&A

0回答

1315閲覧

【ejs】forの中で条件分岐をするには

harigoE8

総合スコア10

EJS

EJSは、JavaScript用のテンプレートエンジン。HTMLなどのテンプレートテキストにJavaScriptのロジックを記述することができます。また、変数・関数の実行をテンプレートテキスト内に埋め込むことも可能です。

0グッド

0クリップ

投稿2022/02/12 01:45

前提・実現したいこと

for文を使ってコンテツを繰り返し表示し、かつ条件に応じて内容を変更したいです。
具体的には、最新のコンテンツに関しては「NEW」といったアイコンをコンテンツの中に入れたいです。
※イメージとしては、↓
イメージ説明
本来であればjsで日時などをカウントして「NEW」を付ける付けないを分岐すると想定されますが
今回においては※イメージのように表示する事が目的です。

発生している問題・エラーメッセージ

ERROR in ./src/ejs/index.ejs (./node_modules/html-webpack-plugin/lib/loader.js!./src/ejs/index.ejs) Module build failed (from ./node_modules/ejs-compiled-loader/index.js): SyntaxError: Unexpected token else in "."

該当のソースコード

index.ejs

1// 該当の配列のみ表示しています// 2<% var review = [ 3 {text:"PIRKKA TABLE / Artek",new:"recruit.png",arrow:"serch_arrow.png"}, 4 {text:"STOOL 60 / Artek",arrow:"serch_arrow.png"}, 5 {text:"マッシュルームスツール S-7297 / 天童",arrow:"serch_arrow.png"}, 6 {text:"ムライスツール S-5026TK-ST / 天童木",arrow:"serch_arrow.png"}, 7 {text:"Bench 3人掛け / NOYES",arrow:"serch_arrow.png"}, 8 {text:"Volster Sofa 3人掛け / NOYES",arrow:"serch_arrow.png"}, 9 {text:"K22 SIDE TABLE / TECTA",arrow:"serch_arrow.png"}, 10 {text:"MARE ROUND CLLANA / MOMO na",arrow:"serch_arrow.png"}, 11 {text:"Order table DT601 / NAGANO INTERI",arrow:"serch_arrow.png"}, 12 {text:"アームチュア(板座)/maruni",arrow:"serch_arrow.png"} 13] %>

_review.ejs

1<div class="p-mainReview"> 2 <div class="p-mainReview__box"> 3 <div class="p-mainReview__inner"> 4 <div class="p-mainReview__title"> 5 <div class="p-mainReview__title--text"> 6 <img src="<%= img %>category.png"><p>オーナーズレビュー</p> 7 </div> 8 </div> 9 <div class="p-mainReview__content"> 10 <ul class="p-mainReview__item"> 11 <% for (var i = 0; i < 10; i++) { %> 12 <% if(i == 1) { %> 13 <li class="p-mainReview__item--link"> 14 <a href="/"><%= review.text[i] %></a> 15 <img src="<%= img[i] %><%= review.new[i] %> "> 16 <img src="<%= img[i] %><%= review.arrow[i] %> "> 17 </li> 18 <% else { %> 19 <li class="p-mainReview__item--link"> 20 <a href="/"><%= review.text[i] %></a> 21 <img src="<%= img[i] %><%= review.arrow[i] %> "> 22 </li> 23 <% } %> 24 <% } %> 25 </ul> 26 </div> 27 <div class="p-mainReview__look"> 28 <img src="<%= img %>arrow.png"><a href="/">家具口コミ一覧を見る</a> 29 </div> 30 </div> 31 </div> 32</div>

試したこと

_topics.ejs

1 <% topics.forEach(function (value) { %> 2 <ul class="p-mainTopics__item"> 3 <li class="p-mainTopics__item--link"> 4 <img src="<%= img %><%= value.icon %> " width="50px"> 5 <div class="p-mainTopics__item--inner"> 6 <a href="/" class="p-mainTopics__item--text"><%= value.text %></a> 7 </div> 8 <img src="<%= img %><%= value.new %> " width="50px"> 9 <img src="<%= img %><%= value.arrow %> "> 10 </li> 11 </ul> 12 <% }) %>

初めは上のように<%= value.new %>を指定して
連想配列の中でnewを表示する配列には 
new:"recruit.png" を記述し、それ以外の配列には newを記載しておりません。
そのため、当然ブラウザで表示すると newを記述した
コンテンツは newのアイコンが表示され それ以外は
イメージ説明※図1
このようなアイコンが繰り返されます。その為、CSS側で

_mainReview.scss

1&:nth-of-type(n + 2) { 2 display: none; 3 }

このように記述しましたが、※図1が表示されたままだったので再度考え直しました。

恐らくnewを表示させるだけの場合
newを表示のコンテンツだけはベタ書きして、それ以外はforで回す、でも表示できると思うのですが
効率的に書くには?と考えた結果、for文の中にifを使って記述した方が一回で書けると思い
現在に至ります。
しかし、うまく動かないため詳しい方、是非ご教授頂けますと助かります。

補足情報(FW/ツールのバージョンなど)

node -v12.6.0
npm -v 6.9.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問