みかづきブログ その3

3ヶ月つづけてみました。

ランダムに数字を抽選しつつ、一巡するまでは同じ数字を抽選しない

文章にするのは非常に難しいですが、順番だけランダムにして一巡させるような場合の実装です。


JavaScript

function Lottery(length) {
    this._length = length;
    this._pod = [];
    
    this.reset(length);
}

Lottery.prototype.reset = function(length) {
    var i = 0;

    for (; i < length; i++) {
        this._pod.push(i);
    }
};    

Lottery.prototype.select = function() {
    var pod = this._pod,
        num = pod.splice(Math.random() * pod.length | 0, 1)[0];
    
    if (!pod.length) {
        this.reset(this._length);
    }
    
    return num;
};

こんな感じで実装しています。


つかいかた

var lottery = new Lottery(5);

lottery.select();

引数にいくつの数字から抽選するかを渡して、selectメソッドを叩くとランダムに数字が抽選されます。
上記例では 0 〜 4 の 5つの数字からランダムに、かつ一巡するまでは重複することなく数字を抽選します。


demo