10

javascript を使用して 0 から 4 までの各数字をランダムに生成したいのですが、各数字は 1 回しか表示されません。だから私はコードを書いた:

for(var l=0; l<5; l++) {
    var randomNumber = Math.floor(Math.random()*5);  
    alert(randomNumber)
}

しかし、このコードは値を繰り返しています。助けてください。

4

12 に答える 12

20

数値の範囲を生成します。

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);
于 2013-03-23T09:50:47.860 に答える
8

それを行うもう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>

于 2013-03-23T10:26:01.797 に答える
6

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() );
}
于 2013-03-23T09:52:55.683 に答える
2

皆様のご協力に感謝いたします。しかし、おそらく、特定の最大範囲で乱数を生成する別の方法を以下のように実装できます。

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();
于 2015-07-08T09:50:59.160 に答える
1

乱数の範囲がそれほど大きくない場合は、これを使用できます。

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)
}

デモ

于 2013-03-23T09:39:50.323 に答える
1

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(" - ");
}

デモ

于 2020-08-24T14:27:10.617 に答える