0

JavaScript を使用して 50 個の繰り返しのない乱数を生成したいのですが、その数は 1 から 50 の範囲です。

4

1 に答える 1

3

最初に順序付きリストを生成します。

var i, arr = [];
for (i = 0; i < 50; i++) {
    arr[i] = i + 1;
}

それをシャッフルします。

arr.sort(function () {
    return Math.random() - 0.5;
});

上記の方法をテストしたところ、うまく機能しました。ただし、ECMAScript 仕様ではArray.sort、このメソッドが完全にランダム化されたリストを生成するように実装する必要はありません。そのため、現在は機能する可能性がありますが、結果は警告なしに変更される可能性があります。以下は、Fisher-Yates shuffle の実装です。これは、適度にランダムな分布を生成することが保証されているだけでなく、ハイジャックされた並べ替えよりも高速です。

function shuffle(array) {
    var p, n, tmp;
    for (p = array.length; p;) {
        n = Math.random() * p-- | 0;
        tmp = array[n];
        array[n] = array[p];
        array[p] = tmp;
    }
}
于 2012-05-22T01:29:42.663 に答える