我試圖編寫一些JavaScript,它接受一個數組的條目並將其排序。它不像它應該編譯。似乎只運行一次for循環。我錯過了什麼?JavaScript數組混排器無法正常工作
//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;
}
宣告 「我」 與'var'!這也是一個非常浪費的洗牌方式,即使你設法讓它運作起來。查看wikipedia上的[Fisher-Yates shuffle article](http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle)。沒有理由調用'.slice()'。 – Pointy 2012-02-08 22:49:11
並在循環之外聲明'var entry' ..哦,到底是什麼,只要運行JSLint man:P – Halcyon 2012-02-08 22:51:38
@FritsvanCampen:我不同意,'entry'不在循環之外使用,JS沒有多個var語句的問題。確實,所有變量的作用範圍都在函數中,但我更願意將它保留在循環中,這就告訴下一個開發人員它只能用在循環中。 – 2012-02-08 23:18:04