Javascriptで重複しないランダムな値を得る方法

投稿者: | 2008年9月22日

配列の中から複数のランダムな値を取り出したい時、

配列の要素数からランダムな数を取得し、array[n]とするのは簡単だが、要素数が少ないと取り出した値がダブる場合がある。
ダブりを防ぐ方法として、取得した値を要素から削除していく方法もあるが、元の配列の順序をランダムに入れ替え、その配列から順に取り出すのが簡単。

ただし、要素数が多くなると、方法によって処理速度が変わる。
代表的な二つの方法。

■早い

Array.prototype.shuffle = function(){
    var i = this.length;
    while(i){
        var j = Math.floor(Math.random()*i);
        var t = this[–i];
        this[i] = this[j];
        this[j] = t;
    }
    return this;
}

■遅い

Array.prototype.shuffle = function(){
    var len = this.length;
    var ary = this.concat();
    var res = [];
    while(len) res.push(ary.splice(Math.floor(Math.random()*len–),1));
    return res
}

■使い方

var a = new Array(“あ”,”い”,”う”,”え”,”お”);
num = a.shuffle();
document.write(num[0]);