配列のエントリを取り、順序をシャッフルするjavascriptを書きました。それはそれが必要なようにコンパイルされていません。 forループを1回だけ実行しているようです。私は何が欠けていますか?JavaScript配列shufflerが動作しない
//random number between 1 and num
function randInt(num){
return Math.floor(num*Math.random()+1);
}
//shuffles deck (array) of any size
function shuffle(array){
var newArray = new Array();
var n = array.length;
for(i=0; i<n; i++){
var entry = randInt(array.length) - 1;
newArray[i] = array[entry]; //assigns random entry in initial array to new array
array = array.splice(entry, 1); //removes the entry that was stored into newArray
}
array = newArray;
}
"i" のvar' 'と宣言します!シャッフルするのは本当に無駄な方法です。たとえそれをうまく機能させることができたとしても。ウィキペディアの[Fisher-Yates shuffle article](http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle)を参照してください。 '.slice()'を呼び出す理由はありません。 – Pointy
ループの外側で 'var entry'を宣言しています。JSLint manを実行してください:P – Halcyon
@FritsvanCampen:ループの外側では' entry'は使用されません.JSは複数のvar文。すべての変数は関数にスコープされていますが、ループ内に保持することをお勧めします。次の開発者には、ループ内でのみ使用されることを意味します。 –