random

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

    配列の要素数からランダムな数を取得し、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]);