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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

3回答

1343閲覧

データの中身をランダムで表示させたい

umi3

総合スコア18

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1グッド

0クリップ

投稿2021/07/26 07:17

編集2021/07/26 07:22

前提・実現したいこと

jsで4択のクイズを表示させるものを作りたいです。
乗せたコードではだいぶカットしてありますが、quizDataの中身を順番に表示させることはできたのですが、データの中身をランダムで表示させたいと思っております。
色々調べたのですが、var a = Math.floor( Math.random() * 4 ) を使おうと思ったのですが、うまく使いこなせません。

どうすればランダム表示させることができるでしょうか?

コード

JavaScript

1var quizData = [ 2 {"question": "1+1", "choices": ["1", "2", "3", "4"], "correct": "2"}, 3 {"question": "2+2", "choices": ["2", "3", "4", "5"], "correct": "4"}, 4 {"question": "3+3", "choices": ["3", "4", "5", "6"], "correct": "6"}, 5 {"question": "4+4", "choices": ["4", "5", "6", "8"], "correct": "8"} 6] 7 8//質問作成 9 const createQst = () => { 10 let choices = quizData[turn].choices; // 今の順番の質問の配列を作る 11 let choicesHtml = ""; // ここに格HTMLのラジオボタンを⼊れる 12 13 // クイズ選択のラジオボタンを作る 14 for (let i = 0; i < choices.length; i++) { // 格配列の値に対して、HTMLのラジオボタンを作る。インデックスに対した値を⼊れる。 15 choicesHtml += "<input type='radio' name='quiz" + turn + "' id='choice" + (i + 1) + "' value='" + choices[i] + "'>" + " <label for='choice" + (i + 1) + "'>" + choices[i] + "</label><br>"; 16 } 17 18 // HTMLに質問を⼊れる 19 question.textContent = "No." + (turn + 1) + " " + quizData[turn].question; 20 21 // 上で作ったラジオボタンをHTMLに⼊れる 22 choice.innerHTML = choicesHtml; 23 24 // ⼀番⽬の質問のボタン名を作る 25 if (turn === 0) { 26 submit.textContent = "Submit"; 27 } 28 } 29
slap_👍を押しています

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

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

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

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

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

guest

回答3

0

quizDataの中身を順番に表示させることはできたのですが、
データの中身をランダムで表示させたいと思っております

質問者さんが、今できたことと、次にやりたいことの違いは、**「順番」と「ランダム」**ですよね。
なら、方針としては、「順番」を示す変数を、ランダムな値に交換すればいいわけです。

具体的には、「quizData[turn]」の「turn」を、取得した乱数を格納した変数にすると。

また、カット前のソースの分量は分かりませんが、もし何かの理由で引っかかっているなら、
テスト用の別の小さいプログラムの中で、乱数を取得する実験をすればいい訳です。

「現状と実装したいこととの差分を考える」とか「新しいことは箱庭で実験する」とか、
これらは、また別の実装にしたい時(たとえば、点数で分岐するとか)、
もっと困難なバグに遭遇した時、役立つ考え方だと思います。

バグとの遭遇確率が上がるのは、自分で自分のコードを把握できてない時です。
よって、なるべくグローバル変数を使わずスコープを小さくするのと同じで、
差分を取ったり、テストコードとかで、自分が見る範囲を縮めるのが有効です。

投稿2021/07/27 02:46

LLman

総合スコア5592

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

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

0

適当なソート

javascript

1var quizData = [ 2 {"question": "1+1", "choices": ["1", "2", "3", "4"], "correct": "2"}, 3 {"question": "2+2", "choices": ["2", "3", "4", "5"], "correct": "4"}, 4 {"question": "3+3", "choices": ["3", "4", "5", "6"], "correct": "6"}, 5 {"question": "4+4", "choices": ["4", "5", "6", "8"], "correct": "8"} 6] 7quizData.forEach(x=>x.choices=x.choices.map(x=>[x,Math.random()]).sort((x,y)=>x[1]-y[1]).map(x=>x[0])); 8console.log(quizData);

投稿2021/07/26 07:53

編集2021/07/26 07:55
yambejp

総合スコア116738

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

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

umi3

2021/07/27 01:53

すみません、回答をランダムで表示するのではなく、問題自体をランダムで表示させたいです…
guest

0

ランダムにクイズデータを取得するには例えば以下のように記述すれば取得できるかと思います。

javascript

1let randomIndex = Math.floor( Math.random() * 4 ); 2 3const randomQuizData = quizData[randomIndex];

投稿2021/07/26 07:35

momotuwo

総合スコア155

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

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

umi3

2021/07/28 01:50

やってみたのですが、[object object ]となってしまって、stringsを使ったりして色々やってみたのですがうまく出来ません 対処法とか教えていただけると嬉しいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問