Сброс итератора в цикле for ... in - PullRequest
1 голос
/ 18 июня 2011

Это часть кода, который я использую для рисования случайных кругов:

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
    }
  }
}

Проблема заключается в том, что при наложении круг с вновь сгенерированными координатами не проверяется на совпадение с кругами, с которыми перекрывающийся круг уже был проверен. Я попытался установить I в 0, прежде чем использовать оператор continue, но это не сработало. Пожалуйста, помогите, я действительно запутался.

Ответы [ 3 ]

4 голосов
/ 18 июня 2011

Не следует использовать for ... in для массивов.

Вместо этого используйте for(var i = 0; i < circles.length; ++i). Затем вы можете сбросить, установив i = 0.

1 голос
/ 18 июня 2011

Почему бы не использовать стандарт для цикла

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

   if (i === l) {
     // draw
   }
}
0 голосов
/ 18 июня 2011

Я не до конца понимаю вопрос, но я не верю, что вы можете сбросить итерации for..in.Вам нужно будет перейти на for(var i=0;...;i++).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...