对于在两次迭代后跳过数组中其余项的循环

时间:2015-11-10 19:54:04

标签: javascript

道歉:

我很抱歉,如果这是一个非常基本的问题,我环顾四周,但由于我从来没有在Javascript对象中得到很好的基础,我可能会在所有错误的地方寻找答案。那个,我没有足够的掌握Javascript来分离出所有JQuery问题中的Javascript,我不想使用JQuery,直到我对Javascript有了更好的理解。谢谢。

问题:

我有一个for循环,它通过一系列Google Map标记,在我打开的地图上将它们恢复为活动状态。标记仍然以某种方式存在于数组中,因为当我通过这段代码迭代几次时它们会随机返回。它将通过循环的一次或两次迭代,然后结束。我注意到错误后添加了hasOwnProperty测试,但这并没有像我认为的那样跳过数组中的问题项。

问题:

为什么我的for循环跳过我知道的数组中的对象?

//Code Loop
for (var i in removedMarkerArray)
{
  //test for valid object
  if (!removedMarkerArray[i].hasOwnProperty('title')) continue;
  else alert("You dawg, this stuff passed.");

  //the actual code doing real work, rather than testing.
  if (removedMarkerArray[i].PD == PD)
  {
    removedMarkerArray[i].setMap(map);

    placedMarkerArray.push(removedMarkerArray[i]);
    removedMarkerArray.splice(i, 1);
  }
}

//Example object in the array.
var marker = new google.maps.Marker({
    map: map,
    position: results[0].geometry.location,
    title: location.mouseover,
    PD: location.PD
});

感谢您阅读我的问题,我期待着任何答案。

4 个答案:

答案 0 :(得分:3)

for...in用于迭代对象的属性。如果要迭代遍历数组的指示,请使用常规for循环。

这个答案解释了原因:https://stackoverflow.com/a/5263872/1385467

答案 1 :(得分:1)

如果removedMarkerArray是真Array,您应该使用经典for loop而不是for in。所以你应该做这样的事情:

for(var i = 0, n = removedMarkerArray.length; i < n; i++){
    console.log(removedMarkerArray[i]); //check desired object in console for debugging
    ..code here
}

答案 2 :(得分:0)

我喜欢<div ng-repeat = "n in lotteryNumbers track by $index" ng-if="doShowExample"> <input type="text" ng-value = "lotteryNumbers[$index]"></input> <input type="text" ng-model = "lotteryNumbers[$index]"></input> </div> ,只要你使用的是真正的数组就可以提高可读性。

forEach

答案 3 :(得分:0)

我的代码从地图中删除标记的问题并非源于我用于...而不是真正的for循环,这是最高评价的问题,它源于我跳过了项目在我的阵列中。当我最初写这篇文章的时候,我认为... in会保护我免受这种影响,但就这一点而言,它就像下面的循环一样。

我在 i 变量上添加了一个减量,因此它将再次运行相同的索引,而不是跳过一个。现在,这涉及到我的阵列中的所有标记。

for (var i = 0; i < placedMarkerArray.length; i++)
{
  if (placedMarkerArray[i].PD === PD)
  {
    placedMarkerArray[i].setMap(null);

    console.log(placedMarkerArray[i]);

    removedMarkerArray.push(placedMarkerArray[i]);
    placedMarkerArray.splice(i, 1);
>>  i--;
  }
}