2011-06-18 104 views
1

這是我使用繪製一些隨機的圓圈部分代碼:重置迭代的for ... in循環

if(circles.length != 0) { //1+ circles have already been drawn 
    x = genX(radius); 
    y = genY(radius); 
    var i = 0; 
    iCantThinkOfAGoodLabelName: 
    for(i in circles) { 
    var thisCircle = circles[i]; 
    if(Math.abs(x-thisCircle["x"])+Math.abs(y-thisCircle["y"])>radius*2) { 
     //overlaps 
    } else { 
     //overlaps 
     x = genX(radius); 
     y = genY(radius); 
     continue iCantThinkOfAGoodLabelName; 
    } 

    if(i == circles.length - 1) { //Last iteration 
     //Draw circle, add to array 
    } 
    } 
} 

的問題是,當存在重疊,與圓不會檢查新生成的座標是否與重疊圓圈已檢查過的圓重疊。在使用continue語句之前,我已經嘗試將i設置爲0,但那不起作用。請幫忙,我真的很困惑。

+0

可以宥創建[的jsfiddle(http://jsfiddle.net)這個? – Ibu

+0

好吧... http://jsfiddle.net/evQ8a/ – JJJollyjim

回答

4

You should not use for ... in on arrays.

使用for(var i = 0; i < circles.length; ++i)代替。然後您可以通過設置i = 0進行重置。

+0

打我吧。這是正確的方法。 –

+0

我試圖找到解釋了很多JavaScript漏洞的優秀網站,包括爲什麼你不應該在數組中使用'for ... in ... ...我認爲這是藍色背景,白色文本,帶有一個很好的邊欄目錄...如果有人在我面前發現它,評論:) – Domenic

+2

我認爲這是它:http://bonsaiden.github.com/JavaScript-Garden/ –

0

我不完全理解這個問題,但我不相信你可以重置for..in的迭代。你需要去for(var i=0;...;i++)

1

爲什麼不使用標準的for循環

for (var i=0,l = circles.length;i < l; i++) { 
    .... 

    if (i === l) { 
    // draw 
    } 
}