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

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

ただいまの
回答率

88.06%

JavaScriptのrandom

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,141

score 103

下記のコードは
選択しの数を入力し、その数だけ選択しを入力してその選択肢をランダムに出力するというプログラムです。
promptを選択しの数だけ繰り返し出力することはできたのですが書き込まれた選択肢を配列に入れる方法がわかりません
どうすればいいのでしょうか?
<!doctype html>
<html>
<head>
  <meta charset="utf-8">
</head>

<body>
  <script>
  var selects = prompt("選択しの数を入力");
  var num = parseInt(selects);
  for (var i = 0; i < num; i++){
    var menu[i] = prompt("選択肢を入力");
  }
  
  //上記の選択をランダムで出力

  </script>

</body>

</html>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

random() のコードまで含めるとこんなところでしょうか。

var menu = [],
    length = Number(prompt('選択肢の数を入力'));

for (var i = 0; i < length; i++){
  menu[i] = prompt('選択肢を入力');
}

console.log(menu[Math.floor(Math.random() * length)]);

Array#push を利用すれば i も省略できます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/18 09:01

    回答ありがとうございます
    また質問で申し訳ございません
    Numbarとはどういったものなのでしょうか?
    打ち込まれた文字を数字化するということですか?

    キャンセル

  • 2015/08/18 09:24

    Number() は Number 型への型変換を行う関数です。
    単純な型変換ならば、parseInt(), parseFloat() よりも Number() を使うことをお勧めします。
    蛇足ですが、parseFloat() はもっと知名度が上がっても良いと思います("**px" の数値変換に parseInt() を使っている人を良く見かけますが、勿体無い!)。
    http://oshiete.goo.ne.jp/qa/5933575.html#an16988790

    キャンセル

  • 2015/08/18 16:47

    ありがとうございます
    無事解決できました!

    キャンセル

0

質問の表題と内容が一致しないように感じましたが・・・「配列に入れる方法がわかりません 」についての回答でよいですよね?

配列数が
  var selects = prompt("選択肢の数を入力");
によって決まるので、動的配列になります

例えばこんな感じに書けます

  var menuAry = new Array();
  var selects = prompt("選択肢の数を入力","");
  var num = parseInt(selects);
  for (var i = 0; i < num; i++){
    menuAry.push( prompt("選択肢を入力","") );
  }

prompt 関数の第2引数で ""(空文字列)の初期値を与えた方がよいでしょうね
入力された文字が数値に変換できる文字とはかぎらないので、最終的にはそのあたりの手当(例外処理)も組み込まれた方がよいと思います

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/17 12:08

    > prompt 関数の第2引数で ""(空文字列)の初期値を与えた方がよいでしょうね
    prompt() でキャンセルされた場合の返り値は null ですが、parseInt('') は NaN であり、parseInt(null) も NaN なので何も変わっていないのではないでしょうか。
    第二引数を '0' にするとか Number() を使えば 0 にキャストされます。
    ただし、NaN になった場合は選択肢が作られない(forループしない)のでそれでよしとする考え方もあると思います。
    設計方針の違いですね。

    キャンセル

  • 2015/08/17 12:27

    think49 さん、コメントありがとうございました。ご指摘内容はごもっともと思いました。
    質問者様が「どのような入力を期待して、どう処理したいか」までは見通せなかったので、書かれているコードをあまりいじらずに・・・と思いつつ、意図しない初期値が入力欄に出現するのはよくないと思い追記した次第でした。

    キャンセル

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

  • ただいまの回答率 88.06%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る