道歉:
我很抱歉,如果这是一个非常基本的问题,我环顾四周,但由于我从来没有在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
});
感谢您阅读我的问题,我期待着任何答案。
答案 0 :(得分:3)
for...in
用于迭代对象的属性。如果要迭代遍历数组的指示,请使用常规for
循环。
答案 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--;
}
}