コース一覧
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分

陽葵さんがノートを開いて、ため息をつきました。「新メニューを出すたびに、HTML に同じ形のカードを書き足してるの。抹茶ラテのときも、レモネードのときも。書き写してるだけなのに、毎回どこか間違えるのよ」

それは間違えて当然です。同じ形のものを手で6回書けば、6回ぶんの間違える機会があるからです。プログラムに任せるべき仕事の、一番わかりやすい形がこれです。

やることは2つに分かれます。1つ目は、メニューの中身を 配列 として持つこと。名前・価格・説明の3つを持ったオブジェクトを、品数のぶんだけ並べます。2つ目は、その配列を forEach で1件ずつ取り出し、document.createElement でカードの要素を組み立てて appendChild で画面にぶら下げることです。

1件ぶんを作る処理さえ書けたら、残りは配列が勝手に増やしてくれます。10品でも100品でも、書く JavaScript の量は変わりません。ここが手書きの HTML との決定的な差です。

HTML には空の <div id="menu-list"> だけが置いてあります。この中にカードを流し込んでください。HTML と CSS は読み取り専用です。カードの見た目 (.menu-card) はすでに CSS 側で用意してあるので、あなたが作る要素に menu-card というクラスを付ければ、そのまま整った形で出ます。

完成条件

  • メニューを配列で持つ。1件は名前・価格・説明を持ったオブジェクトにし、6件以上 並べる
  • 配列を forEach でまわし、1件につき1枚のカード要素を作る
  • カードには menu-card クラスを付け、#menu-list の中に appendChild する
  • カードの中に、名前・価格・説明をそれぞれ別の要素で入れる。名前は menu-name、価格は menu-price クラスを付ける
  • 価格は「580円」のように、数値のうしろに円を付けて出す

進め方

白紙から書いてください。手が止まったらヒントを開けます。ヒントは3段階で、①方針、②使う構文、③部分解の順に出ます。1つも開けずに通せたら、その問題は自分のものです。

課題

  1. メニューを配列で持ち、1件を名前・価格・説明のオブジェクトにして6件以上並べる
  2. 配列を forEach でまわし、1件につき1枚のカード要素を作る
  3. カードに menu-card クラスを付け、#menu-list の中に appendChild する
  4. カードの中に名前 (menu-name) と価格 (menu-price) と説明をそれぞれ別の要素で入れる
  5. 価格は 580円 のように数値のうしろに円を付けて表示する

ヒント

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

①方針 いきなり6枚を出そうとしないでください。まず配列を1件だけにして、1枚のカードが正しい形で出るところまで作ります。1枚が出たら、あとは配列に足すだけで6枚になります

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

できているか

  • メニューカードが6枚以上描かれている
  • どのカードにも品名が入っている
  • 価格が円付きで表示されている
エディタを読み込んでいます