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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

818閲覧

3択クイズを作成したいのだが,JavaScript で分からない所がある。

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2020/02/18 11:29

編集2020/02/18 11:44
3択のクイズを作成したい。 ### 発生している問題・エラーメッセージ

3択クイズを作ろうと,ある教材の指示通りに作っていたのですが,
貼り付けてあるコードの
quizSet[currentNum].c.forEach(choice => {
const li = document.createElement("li");
li.textContent = choice;
choices.appendChild(li)

の c.forEach(choice => {
より以下が何を表しているのか分かりません。

エラーメッセージ

### 該当のソースコード quizSet[currentNum].c.forEach(choice => { const li = document.createElement("li"); li.textContent = choice; choices.appendChild(li)

JavaScript
コード

'use strict'; { const question = document.getElementById('question'); const choices = document.getElementById('choices'); const btn = document.getElementById('btn'); const quizSet = [ {q: 'What is A?', c: ['A0', 'A1', 'A2']}, {q: 'What is B?', c: ['B0', 'B1', 'B2']}, {q: 'What is C?', c: ['C0', 'C1', 'C2']}, ]; let currentNum = 0; question.textContent = quizSet[currentNum].q; quizSet[currentNum].c.forEach(choice => { const li = document.createElement('li'); li.textContent = choice; choices.appendChild(li); }); } ```html コード
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Quiz</title> <link rel="stylesheet" href="css/styles.css"> </head> <body> <section class="container"> <p id="question"></p> <ul id="choices"></ul> <div id="btn" class="disabled">Next</div> </section> <script src="js/main.js"></script> </body> </html>
コード

試したこと

forEach() とdocument.createElement() について調べた。

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

ここにより詳細な情報を記載してください。。

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

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

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

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

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

m.ts10806

2020/02/18 11:32

マークダウンのcode機能は任意数設置できるのでHTMLにも反映してください。 また、提示のJavaScriptのコードは構文エラーが出ますのでそもそも動きませんよ。
guest

回答1

0

ベストアンサー

モダンな書き方です。

js

1// この式の結果は配列っぽい 2// quizSet[currentNum].c 3 4// なのでやってる事自体はこれと同じ 5for (let i = 0; i < quizSet[currentNum].c.length; i++) { 6 const choice = quizSet[currentNum].c[i]; 7 const li = document.createElement("li"); 8 li.textContent = choice; 9 choices.appendChild(li); 10}

このforEachmapは所謂リスト操作という必殺技で、
上記は6行必要ですが、forEachはまず行数が5行に圧縮されます。

また対象が前、forEachという「各々」が2番目
加工内容が関数配下という順で現れるので、英語っぽくて読みやすいのも特徴です。

そのため多くの言語やライブラリで採用されています。
PythonやRubyなんかではfor文書く奴は雑魚みたいな扱いをされることもあります。


例題として九九の二次元配列をmapを利用して作ってみます。

mapというのは数学用語の写像という意味があり、
そこから転じて「値の集合」それぞれに加工する関数を潜らせます。
そうして得た新しい値の集合を配列にして戻すという意味で使われます。

普通に九九をfor文で作ると10行近くになると思いますが、ご覧の通り2行です。
まぁ必殺技なので最初は何だよコレ……となるかと思いますが、
興味が出てきたらゆくゆくという感じで学習してみてください。

js

1const kuku = [1, 2, 3, 4, 5, 6, 7, 8, 9]; 2 3const result = kuku.map(a => kuku.map(b => a * b)); 4 5console.log(JSON.stringify(result, null, 2));

結果

JSON

1[ 2 [ 3 1, 4 2, 5 3, 6 4, 7 5, 8 6, 9 7, 10 8, 11 9 12 ], 13 [ 14 2, 15 4, 16 6, 17 8, 18 10, 19 12, 20 14, 21 16, 22 18 23 ], 24 [ 25 3, 26 6, 27 9, 28 12, 29 15, 30 18, 31 21, 32 24, 33 27 34 ], 35 [ 36 4, 37 8, 38 12, 39 16, 40 20, 41 24, 42 28, 43 32, 44 36 45 ], 46 [ 47 5, 48 10, 49 15, 50 20, 51 25, 52 30, 53 35, 54 40, 55 45 56 ], 57 [ 58 6, 59 12, 60 18, 61 24, 62 30, 63 36, 64 42, 65 48, 66 54 67 ], 68 [ 69 7, 70 14, 71 21, 72 28, 73 35, 74 42, 75 49, 76 56, 77 63 78 ], 79 [ 80 8, 81 16, 82 24, 83 32, 84 40, 85 48, 86 56, 87 64, 88 72 89 ], 90 [ 91 9, 92 18, 93 27, 94 36, 95 45, 96 54, 97 63, 98 72, 99 81 100 ] 101]

投稿2020/02/18 11:46

miyabi-sun

総合スコア21203

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

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

hayataka2049

2020/02/18 12:25

mapのリンクはmapメソッドの方では? あと「また対象が~採用されています。」の説明はPythonには当てはまらないので、次の行でPythonをあげるのは紛らわしく感じます(論理的には問題ありませんが)。
退会済みユーザー

退会済みユーザー

2020/02/20 02:18

遅くなり申し訳ございません。 丁寧なご回答ありがとうございます。 今後の参考になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問