javascript を使用して 0 から 4 までの各数字をランダムに生成したいのですが、各数字は 1 回しか表示されません。だから私はコードを書いた:
for(var l=0; l<5; l++) {
var randomNumber = Math.floor(Math.random()*5);
alert(randomNumber)
}
しかし、このコードは値を繰り返しています。助けてください。
javascript を使用して 0 から 4 までの各数字をランダムに生成したいのですが、各数字は 1 回しか表示されません。だから私はコードを書いた:
for(var l=0; l<5; l++) {
var randomNumber = Math.floor(Math.random()*5);
alert(randomNumber)
}
しかし、このコードは値を繰り返しています。助けてください。
数値の範囲を生成します。
var numbers = [1, 2, 3, 4];
そしてそれをシャッフルします:
function shuffle(o) {
for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};
var random = shuffle(numbers);
それを行うもう1つの方法:
for (var a = [0, 1, 2, 3, 4], i = a.length; i--; ) {
var random = a.splice(Math.floor(Math.random() * (i + 1)), 1)[0];
console.log(random);
}
もっとコンパクトにできるかどうかはわかりません。
テスト: http://jsfiddle.net/2m3mS/1/
埋め込みデモは次のとおりです。
$('button').click(function() {
$('.output').empty();
for (var a = [0, 1, 2, 3, 4], i = a.length; i--; ) {
var random = a.splice(Math.floor(Math.random() * (i + 1)), 1)[0];
$('.output').append('<span>' + random + '</span>');
}
}).click();
.output span {
display: inline-block;
background: #DDD;
padding: 5px;
margin: 5px;
width: 20px;
height: 20px;
text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="output"></div>
<button>Run</button>
Adil と Minko によって与えられた答えには大きな問題があります (Minko は少なくとも小さな数のセットに制限しましたが): 彼らは同じ数を何度も繰り返します。
その意味で、より良い方法は、可能な値を含む配列を作成し、それをシャッフルしてから、そこから要素をポップすることです。これには、配列をシャッフルするという複雑さが必要になりますが、上記の問題は解消されます。
var elements = [1, 2, 3, 4];
elements.shuffle(); // not a standard Javascript function, needs to be implemented
while( elements.length > 0 ) {
console.log( elements.pop() );
}
皆様のご協力に感謝いたします。しかし、おそらく、特定の最大範囲で乱数を生成する別の方法を以下のように実装できます。
function generateRan(){
var max = 20;
var random = [];
for(var i = 0;i<max ; i++){
var temp = Math.floor(Math.random()*max);
if(random.indexOf(temp) == -1){
random.push(temp);
}
else
i--;
}
console.log(random)
}
generateRan();
乱数の範囲がそれほど大きくない場合は、これを使用できます。
var exists = [],
randomNumber,
max = 5;
for(var l = 0; l < max; l++) {
do {
randomNumber = Math.floor(Math.random() * max);
} while (exists[randomNumber]);
exists[randomNumber] = true;
alert(randomNumber)
}
HTML:
<p id="array_number" style="font-size: 25px; text-align: center;"></p>
JS:
var min = 1;
var max = 90;
var stop = 6; //Number of numbers to extract
var numbers = [];
for (let i = 0; i < stop; i++) {
var n = Math.floor(Math.random() * max) + min;
var check = numbers.includes(n);
if(check === false) {
numbers.push(n);
} else {
while(check === true){
n = Math.floor(Math.random() * max) + min;
check = numbers.includes(n);
if(check === false){
numbers.push(n);
}
}
}
}
sort();
//Sort the array in ascending order
function sort() {
numbers.sort(function(a, b){return a-b});
document.getElementById("array_number").innerHTML = numbers.join(" - ");
}