単純なランダムを取得する
javascriptでランダムな数字を得るにはMathオブジェクトのrandomメソッドを利用します。このメソッドでは0以上1未満の範囲で疑似乱数を返します。
var randomNumber = Math.random();
任意の範囲(min~max)における数値を得るには
var randomNumber = Math.random() * (max - min) + min;
のようにして取得しますがこの場合だと整数ではないので整数にしたい場合は同じくMathオブジェクトのfloorメソッドを利用します。このメソッドは引数(数値)を一つ取り、その引数の小数点以下を切り捨てて整数として返すものです。
var randomNumber = Math.floor( Math.random() * (max - min + 1) ) + min;
このようにするとminからmaxまでの整数を得ることができます。
Math.floor (MDN) (https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Math/floor)
重複しないランダムな整数を取得する
整数を重複しないように取得するには配列をシャッフルしてしまって指定の要素を取得するのが一番いいのではないかと思います。シャッフルの仕方として配列のsortメソッドを使う方法と自前で作る方法があります。
配列のsortメソッドを使う
array.sort(func);
funcの戻り値が正のときか負のときかで配列の順序の入れ替え方を決定させます。
function func(){ return Math.random()-0.5; } var array = [1,2,3,4,5,6,7,8,9,10]; array.sort(func);
もしくは
var array = [1,2,3,4,5,6,7,8,9,10]; array.sort(function(){ return Math.random()-0.5; });
デモ)
Array.sortで
var array = [1,2,3,4,5,6,7,8,9,10];
をシャッフル
(https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)
ソートするメソッドを自分で定義する
Fisher-Yates法という配列シャッフルアルゴリズムが有名だそうです。(参考資料より抜粋)
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; } } var array = [1,2,3,4,5,6,7,8,9,10]; array.shuffle();
デモ)
Fisher-Yates法で
var array = [1,2,3,4,5,6,7,8,9,10];
をシャッフル
配列をランダムに並替えるメソッドを定義する[上級テクニック](http://www.fumiononaka.com/TechNotes/Flash/FN0212002.html)
Fisher-Yates shuffle (http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle)