2016-01-04 103 views
0

我遇到問題。當我從位置1開始到位置49結束時,一個元素在控制檯輸出時似乎是未定義的。未定義元素Javascript數組

for (var i = 49; i > 0; i--) { 
    var j = Math.floor(Math.random() * (i + 1)); 
    var temp = genNr[i]; 
    genNr[i] = genNr[j]; 
    genNr[j] = temp; 
} 

請幫幫我。

+0

在這個函數處理它之前genNr中有什麼? – thanksd

+0

你需要提供圍繞你已發佈的循環的循環......我猜測使用'j'進行索引,並且'genNr'數組被初始化了嗎?這可能是一個索引超出範圍的問題! – AdamJeffers

+0

陣列中有多少個元素?換句話說,'49'從哪裏來? – Pointy

回答

0

我在想,genNr包含49個元素。第一次循環運行時,i將是49,所以你正試圖訪問genNr[49]。但是,由於數組索引從零開始,因此genNr[49]未定義。

您需要開始與i等於陣列長度減1的循環,並在i小於零時停止。

for (var i = genNr.length - 1; i >= 0; i--) { 
    var j = Math.floor(Math.random() * (i + 1)); 
    var temp = genNr[i]; 
    genNr[i] = genNr[j]; 
    genNr[j] = temp; 
}