2011-06-18 14 views
1

でこれは私がいくつかのランダムな円を描くように使用していたコードの一部です:にイテレータをリセットするために...ループ

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)を作成yuoことができますか? – 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

私は、配列に 'for ... in'を使用してはいけない理由を含め、JavaScriptの多くを説明した優れたサイトを見つけようとしています...青い背景、白いテキスト、素敵なサイドバーの目次...誰かが私の前にそれを見つけたら、コメント: – Domenic

+2

私はこれと思う:http://bonsaiden.github.com/JavaScript-Garden/ –

0

私は質問を完全に理解していませんが、for..inの繰り返しをリセットすることはできません。 for(var i=0;...;i++)に行く必要があります。

1

なぜループ

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

    if (i === l) { 
    // draw 
    } 
} 
関連する問題