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

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

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

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

Q&A

解決済

3回答

614閲覧

[JS]複数のランダム整数字を取得したい

KAZUHA

総合スコア15

JavaScript

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

0グッド

0クリップ

投稿2019/10/06 15:13

編集2019/10/07 13:34

前提・実現したいこと

お世話になります。
10個のdivが並んでいて、クリックするとランダムに2個winを表示したいです。
それ以外は、loseを表示したいです。
また、2個は重複しないようにしたいです。

現状、1個は取得できているのですが、複数の表現に困っています。
アドバイスいただけると幸いです。よろしくお願いいたします。

該当のソースコード

javascript

1 <script> 2 'use strict';//エラーチェック 3 const num = 10; 4 const winner = Math.floor(Math.random() * num); // 0 - 9 5 6 for (let i = 0; i < num; i++) { 7 const div = document.createElement('div'); 8document.createElement() 9 div.classList.add('box'); 10 div.addEventListener('click', () => { 11 if (i === winner) {//iと比較して当たり判定 12 div.textContent = 'Win!'; 13 div.classList.add('win'); 14 } else { 15 div.textContent = 'Lose!'; 16 div.classList.add('lose'); 17 } 18 }); 19 20 document.body.appendChild(div);//divをbodyの子要素として追加 21 } 22 </script>

試したこと

このようにしてみると、2つwinが出ましたが
ランダム状態になっていますでしょうか。。。

```javascript <style> body { display: flex; flex-wrap: wrap;/*折り返し*/ } .box { width: 100px; height: 100px; background: skyblue; cursor: pointer; transition: 0.8s; margin: 0 8px 8px 0; text-align: center; line-height: 100px; } .win { background: pink; border-radius: 50%; transform: rotate(360deg); } .lose { transform: scale(0.9); } </style> </head> <body> <script> 'use strict';//エラーチェック const num = 10; const winner = Math.floor(Math.random() * num); // 0 - 9 const winner2 = Math.floor(Math.random() * num); // 0 - 9 //Math.random() * num 0以上1未満のランダムな数値をかける //Math.floor 小数点以下を切り捨て for (let i = 0; i < num; i++) { //i カウンター 1ずつ増えて 10になったら抜ける 0から const div = document.createElement('div');//定数div 要素を作るには document.createElement() div.classList.add('box'); div.addEventListener('click', () => { if (i === winner) {//iと比較して当たり判定 div.textContent = 'Win!'; div.classList.add('win'); } else if (i === winner2){ div.textContent = 'Win2!'; div.classList.add('win'); } else { div.textContent = 'Lose!'; div.classList.add('lose'); } }); document.body.appendChild(div);//divをbodyの子要素として追加 } </script> </body>

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

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

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

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

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

guest

回答3

0

ベストアンサー

次のようにしたらどうでしょう。

  1. 0 から 9 までの配列を作る。

連番の数字の配列を作成(es2015 ver)

  1. 配列をシャッフルする。

JavaScriptで配列をシャッフルする方法

  1. winner に配列の先頭二つの要素を入れる。

Array.prototype.slice()

  1. クリックイベントの中で winner の中に i があるかどうかを調べる。

Array.prototype.includes()

投稿2019/10/06 22:15

Zuishin

総合スコア28660

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

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

KAZUHA

2019/10/07 13:22

ご丁寧にリンクまで貼っていただき、ありがとうございます! ご教授いただいたとおりにすれば、できるのかと思いますが 自身の勉強が追い付いていないため、もう少し考えさせていただきます@@
Zuishin

2019/10/07 13:38

質問のコードは自分で書いたのかと思いました。
KAZUHA

2019/10/07 14:59

動画を見ながら書いたので、なかなか融通が利きませんでした。。 ですがどうにか、思い通りの動きになりました。ありがとうございました!
guest

0

定数を2つにして、複数のランダムな整数を取得することができました。
ありがとうございました。

<body> <script> 'use strict';//エラーチェック const num = 5; // const winner = Math.floor(Math.random() * num); // 0 - 9 const winner=Math.floor(Math.random()*num); const winner2=(winner+Math.floor(Math.random()*10)+1)%num; //Math.random() * num 0以上1未満のランダムな数値をかける //Math.floor 小数点以下を切り捨て for (let i = 0; i < num; i++) { //i カウンター 1ずつ増えて 10になったら抜ける 0から const div = document.createElement('div');//定数div 要素を作るには document.createElement() div.classList.add('box'); div.addEventListener('click', () => { if (i === winner || i === winner2) {//iと比較して当たり判定 div.textContent = 'Win!'; div.classList.add('win'); } else { div.textContent = 'Lose!'; div.classList.add('lose'); } }); document.body.appendChild(div);//divをbodyの子要素として追加 } </script> </body>

投稿2019/10/07 15:01

KAZUHA

総合スコア15

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

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

0

こんな感じで

javascript

1<script> 2window.addEventListener('DOMContentLoaded', ()=>{ 3 const divs=document.querySelectorAll('div'); 4 document.querySelector('#btn').addEventListener('click',e=>{ 5 var win_length=2; 6 //var wl=Array(win_length).fill('win').push(...Array(divs.length - win_length).fill('lose')); 7 var w=Array(win_length).fill('win'); 8 var l=Array(divs.length - win_length).fill('lose'); 9 var wl_array=w.concat(l).map(x=>[x,Math.random()]).sort((x,y)=>x[1]-y[1]).map(x=>x[0]); 10 divs.forEach((x,y)=>x.textContent=wl_array[y]); 11 }); 12}); 13</script> 14<input type="button" value="do" id="btn"> 15<div></div> 16<div></div> 17<div></div> 18<div></div> 19<div></div> 20<div></div> 21<div></div> 22<div></div> 23<div></div> 24<div></div>

投稿2019/10/07 00:37

yambejp

総合スコア114839

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

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

KAZUHA

2019/10/07 13:19

早速、ご回答いただきありがとうございます!確かに2つwinが出てすごいのですが、ボックスをクリックすることでwinであるかどうが、わかるようにしたいのでもう少し考えさせていただきたいです><
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問