• ベストアンサー

プログラミングに関して全くの初心者です。

プログラミングに関して全くの初心者です。 javascriptでランダムに値を振り分けるときは https://webmanab-html.com/tip/control-random-values/のように Math.randomを使用するのですが、 (1)例えば1、5、9のように均等な間隔のある3つの値を、 (2)9人にランダムに割り当てるけど、結果として1の人、5の人、9の人が3人ずつになるように したいのです。 どのような切り口で調べたらいいかわからないこと、急ぎでスクリプトを準備しなければならないことから質問することにしましたか。 どなたか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

function* shuffle (ary) {  const   rnd = n => Math.floor (Math.random () * n);    for (let i = ary.length; i--; ) {   let j = rnd (i);   yield ary[j];   ary[j] = ary[i];  } } let G = [1,1,1,5,5,5,9,9,9]; //-- function hokanokansu (x) {  console.log (x); } for (let n of shuffle (G)) {  hokanokansu (n); }

bluechart
質問者

お礼

報告が遅くなってしまいましたが、おかげさまでうまくいきました。何度も丁寧に教えてくれて、さらに私のスクリプトが間違っている理由もいくつかご指摘いただきありがとうございました!

その他の回答 (4)

回答No.5

1.リストをつくった後値を取り出して、 2.ほかの関数の中で使いたいのですが #さんが回答されている部分の let rst = [...shuffle (G)];これが、シャッフルなので、 これを「持っている間(rstの部分)」どこでも好きな場所で、シャッフル済み配列を使えますよ。 >console.logで取り出した値を この命令は、取り出すためのものではなく、 デバッグコンソール画面に表示するための、デバッグ関数です。 (なので、これを行っても行わなくても何も変化はしません) ですので a=50; とか a=[1,2,3,4];とかの配列を作った後 プログラムを終わらせるか、意図的に消すa=nullなど別のを再代入 しない限り、覚えてますよ。

bluechart
質問者

お礼

ここではベストアンサーにはしないのですが、私のスクリプトが間違っている理由をいくつかとりあげてくださりありがとうございました。 励ましのお言葉もありがとうございます!

回答No.3

function* shuffle (ary) {  const   rnd = n => Math.floor (Math.random () * n);    for (let i = ary.length; i--; ) {   let j = rnd (i);   yield ary[j];   ary[j] = ary[i];  } } let G = Array (9); G.fill (1, 0, 3); G.fill (5, 3, 6); G.fill (9, 6, 9); let rst = [...shuffle (G)]; console.log (rst);

bluechart
質問者

お礼

スクリプトをくださりありがとうございます。 この後、console.logで取り出した値を ほかの関数の中で使いたいのですが 教えていただけますか?

回答No.2

1番さんの回答が一番いいだろうな。 配列に 1,1,1,5,5,5,9,9,9 と入れて置き、数字をランダムで入れ替える(シャッフル) そのまま、 配列の先頭=0番から9人に与えて終了。 サンプルはこんなのでいいかな。。 https://javascript.step-learn.com/contents/J061-array-shuffle.html

bluechart
質問者

お礼

ありがとうございます。また、urlもありがとうございます。すみません、 1.リストをつくった後値を取り出して、 2.ほかの関数の中で使いたいのですが 教えていただけますか?

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

それなら、配列を9個作って、その中の値に1,5,9を3つずつ入れて置いて、9個の配列をランダムに並べればいいと思いますよ。

bluechart
質問者

お礼

なるほど、用語をよく知らなかったのでスッキリまとめてくださりありがとうございます。

関連するQ&A

専門家に質問してみよう