コース一覧
JavaScript道場 ハレノヒ珈琲を動かす10問
メニューの絞り込み

JavaScript道場 ハレノヒ珈琲を動かす10問

JavaScript の基本を終えた人が、白紙から画面を動かす演習専用コースです。解説はありません。依頼と完成条件だけを読み、自分でコードを組み立てます。HTML と CSS は用意してあるので、書くのは JavaScript だけです。手が止まったときのために、方針・使う構文・部分解の3段階のヒントを各問に用意しています。クリックへの応答から始まり、クラスの切り替え、入力の監視、配列の絞り込みと描画、フォームの検証、タブの出し分けを経て、最後は予約ページの一連の流れまで、10問で主要な操作を一巡します。1問15分から45分、全10問で約5時間です。JavaScript入門を終えて「読めるけれど自分では書けない」と感じている方に向いています。

1
初段
01. ボタンで挨拶を出せ15分
02. ダークモード切替15分
03. 文字数カウンター20分
04. メニューの絞り込み25分
2
中段
01. 予約フォームの検証25分
02. 配列からメニューを描画せよ25分
03. タブ切替30分
04. 営業中か準備中かを判定せよ30分
3
師範
01. 時計の表示を整えよ30分
02. 総合 予約ページ完成45分

メニューの絞り込み

中段 / 目安 25分

「メニューが8品まで増えたの」と陽葵さんは誇らしげですが、すぐ困り顔になりました。「そうしたら『ドリンクだけ見たい』っておっしゃるお客様がいて。カテゴリで絞り込めない?」

script.js には8品ぶんのデータが menu という配列で用意してあります。1件は name price category の3つを持つオブジェクトです。category に入るのは drink food sweets の3種類です。

HTML 側の #menu-list は空っぽの ul です。カテゴリのボタンにはそれぞれ data-category が付いていて、すべてを出すボタンだけ all になっています。

この問題の型は「データを絞って、描き直す」です。まず全件を描く関数を1つ作り、その関数に「どのカテゴリか」を渡せるようにします。ボタンが押されたら、押されたボタンのカテゴリでその関数を呼び直します。描き直すときは、前に描いたものを一度消してから並べ直してください。消さずに足すと、押すたびに増えていきます。

ページを開いた直後は8品すべてが並んでいる状態にします。

完成条件

  • 開いた直後は8品すべてが #menu-list に並ぶ
  • 1件は class="menu-item" の li として描く
  • 各件に商品名(class="name")と価格(class="price")を入れる
  • カテゴリのボタンを押すと、そのカテゴリの品だけが並ぶ
  • 「すべて」を押すと8品に戻る

進め方

配列から条件に合うものだけを取り出すのは filter です。all のときだけは絞らず配列をそのまま使います。

描き直しの最初にやるのは list.innerHTML = "" です。これで前回ぶんが消えます。そのうえで forEach で1件ずつ li を作り、appendChild で足していきます。

押されたボタンのカテゴリは、そのボタンの dataset.category から読めます。ボタン4つそれぞれに待ち伏せを仕掛けるには querySelectorAll で集めて forEach を回すのが素直です。

ヒントは3段階で、①方針、②使う構文、③部分解の順に出ます。1つも開けずに通せたら、その問題は自分のものです。

課題

  1. 開いた直後は8品すべてを #menu-list に描く
  2. 1件を class="menu-item" の li として描き、.name と .price を中に入れる
  3. カテゴリのボタンを押すとそのカテゴリの品だけに絞り込む
  4. 「すべて」のボタンで8品に戻す

ヒント

前のヒントを開くと次が開きます。開かずに解けると未開封クリアです

①方針 描画を1つの関数にまとめます。引数にカテゴリを取り、絞ってから描くようにすれば、ボタンからはその関数を呼ぶだけになります。

ヒント 2ヒント 1 を開くと読めます
ヒント 3ヒント 2 を開くと読めます
index.html
style.css
script.js
プレビュー

できているか

  • 開いた直後は8品すべてが並んでいる
  • 「ドリンク」を押すと3品に絞られる
  • 「スイーツ」を押すと2品だけになる
  • 「すべて」を押すと8品に戻る
エディタを読み込んでいます