- ベストアンサー
プログラミングに関して全くの初心者です。
プログラミングに関して全くの初心者です。 javascriptでランダムに値を振り分けるときは https://webmanab-html.com/tip/control-random-values/のように Math.randomを使用するのですが、 (1)例えば1、5、9のように均等な間隔のある3つの値を、 (2)9人にランダムに割り当てるけど、結果として1の人、5の人、9の人が3人ずつになるように したいのです。 どのような切り口で調べたらいいかわからないこと、急ぎでスクリプトを準備しなければならないことから質問することにしましたか。 どなたか教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
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); }
その他の回答 (4)
- AsarKingChang
- ベストアンサー率46% (3467/7474)
1.リストをつくった後値を取り出して、 2.ほかの関数の中で使いたいのですが #さんが回答されている部分の let rst = [...shuffle (G)];これが、シャッフルなので、 これを「持っている間(rstの部分)」どこでも好きな場所で、シャッフル済み配列を使えますよ。 >console.logで取り出した値を この命令は、取り出すためのものではなく、 デバッグコンソール画面に表示するための、デバッグ関数です。 (なので、これを行っても行わなくても何も変化はしません) ですので a=50; とか a=[1,2,3,4];とかの配列を作った後 プログラムを終わらせるか、意図的に消すa=nullなど別のを再代入 しない限り、覚えてますよ。
お礼
ここではベストアンサーにはしないのですが、私のスクリプトが間違っている理由をいくつかとりあげてくださりありがとうございました。 励ましのお言葉もありがとうございます!
- babu_baboo
- ベストアンサー率51% (268/525)
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);
お礼
スクリプトをくださりありがとうございます。 この後、console.logで取り出した値を ほかの関数の中で使いたいのですが 教えていただけますか?
- AsarKingChang
- ベストアンサー率46% (3467/7474)
1番さんの回答が一番いいだろうな。 配列に 1,1,1,5,5,5,9,9,9 と入れて置き、数字をランダムで入れ替える(シャッフル) そのまま、 配列の先頭=0番から9人に与えて終了。 サンプルはこんなのでいいかな。。 https://javascript.step-learn.com/contents/J061-array-shuffle.html
お礼
ありがとうございます。また、urlもありがとうございます。すみません、 1.リストをつくった後値を取り出して、 2.ほかの関数の中で使いたいのですが 教えていただけますか?
- oboroxx
- ベストアンサー率40% (317/792)
それなら、配列を9個作って、その中の値に1,5,9を3つずつ入れて置いて、9個の配列をランダムに並べればいいと思いますよ。
お礼
なるほど、用語をよく知らなかったのでスッキリまとめてくださりありがとうございます。
お礼
報告が遅くなってしまいましたが、おかげさまでうまくいきました。何度も丁寧に教えてくれて、さらに私のスクリプトが間違っている理由もいくつかご指摘いただきありがとうございました!