配列の中から複数のランダムな値を取り出したい時、
配列の要素数からランダムな数を取得し、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]);