微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在for…in循环中重置迭代器

如何解决在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,但这没有用。请帮助,我真的很困惑。     

解决方法

        您不应该在数组上使用
for ... in
。 请改用
for(var i = 0; i < circles.length; ++i)
。然后您可以通过设定
i = 0
来重设。     ,        为什么不使用标准的循环
for (var i=0,l = circles.length;i < l; i++) {
   ....  

   if (i === l) {
     // draw
   }
}
    ,        我尚未完全理解这个问题,但我不相信您可以重置
for..in
的迭代。您需要去6英镑。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。