Javascript For循环在两次迭代后跳过数组中的其余项
道歉: 如果这是一个非常基本的问题,我很抱歉,我已经环顾了四周,但是由于我从来没有在Javascript对象中获得过非常坚实的基础,我可能在所有错误的地方寻找答案。我对Javascript的掌握还不够扎实,无法在所有JQuery问题中区分出什么是Javascript,在我对Javascript有了更好的理解之前,我不想使用JQuery。多谢各位 问题: 我有一个for循环,它通过一组谷歌地图标记,将它们返回到我打开的地图上的活动状态。这些标记仍然以某种方式存在于数组中,因为当我在这段代码中迭代几次时,它们会随机返回。它将通过一个或两个循环迭代,然后结束。我注意到错误后添加了hasOwnProperty测试,但这并不是像我认为应该的那样跳过数组中的问题项 问题: 为什么我的for循环会跳过我知道存在的数组中的对象Javascript For循环在两次迭代后跳过数组中的其余项,javascript,Javascript,道歉: 如果这是一个非常基本的问题,我很抱歉,我已经环顾了四周,但是由于我从来没有在Javascript对象中获得过非常坚实的基础,我可能在所有错误的地方寻找答案。我对Javascript的掌握还不够扎实,无法在所有JQuery问题中区分出什么是Javascript,在我对Javascript有了更好的理解之前,我不想使用JQuery。多谢各位 问题: 我有一个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
});
感谢您阅读我的问题,我期待您的回答。
for…in
用于迭代对象的属性。如果要循环遍历数组的标记,请使用常规的for
循环
这个答案解释了为什么:
for…in
用于迭代对象的属性。如果要循环遍历数组的标记,请使用常规的for
循环
这个答案解释了原因:如果
RemovedMarkerary
是一个真正的数组
你应该使用经典的for循环
而不是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
}
for(变量i=0,n=removedMarkerArray.length;i
如果removedMarkerArray
是一个真实的数组
,则应使用经典的for循环
,而不是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
}
for(变量i=0,n=removedMarkerArray.length;i
我喜欢forEach
,只要您使用的是实数组,就可以获得更好的可读性
removedMarkerArray.forEach(function(removedMarker, index) {
//test for valid object
if (!removedMarker.hasOwnProperty('title')) continue;
else console.log("You dawg, this stuff passed.");
//the actual code doing real work, rather than testing.
if (removedMarker.PD == PD)
{
removedMarker.setMap(map);
removedMarkerArray.splice(index, 1);
placedMarkerArray.push(removedMarker);
}
});
我喜欢
forEach
,只要您使用的是真实数组,就可以获得更好的可读性
removedMarkerArray.forEach(function(removedMarker, index) {
//test for valid object
if (!removedMarker.hasOwnProperty('title')) continue;
else console.log("You dawg, this stuff passed.");
//the actual code doing real work, rather than testing.
if (removedMarker.PD == PD)
{
removedMarker.setMap(map);
removedMarkerArray.splice(index, 1);
placedMarkerArray.push(removedMarker);
}
});
我的代码从映射中删除一个标记的问题并不是因为我使用了for,而是因为我跳过了数组中的项目,而不是最高评分的问题所说的true for循环。当我最初写这篇文章的时候,我认为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--;
}
}
for(变量i=0;i>我--;
}
}
我的代码从映射中删除标记的问题并不是因为我使用了for…,而是因为我跳过了数组中的项目,这是评分最高的问题所说的true for循环。当我最初写这篇文章的时候,我认为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--;
}
}
for(变量i=0;i>我--;
}
}
请缩短问题并对其进行重构,这样会有一个枯燥、不相关的部分,你可以随心所欲地编写,然后是一个包含真实问题的部分,这样我就可以专注于此。我已经清理了问题部分,并分出了一个问题部分。这就解释了我希望更好地回答的问题吗?您应该将for in
循环更改为经典的for
循环,正如我在下面的回答中所指出的,并放置控制台.log(RemovedMarkerary[I])
作为for
循环的第一行,查看输出是什么以及是否命中每个预期标记。我已将“console.log(removedMarkerArray[I])”添加到for循环的第一行。我可以清楚地看到穿过的物体,但只有一两个物体到达实际的地图,而不是全部。我保持了警报,当我运行此代码时,它仍然只出现两次。在控制台中,当您折叠所有对象时,它们是否具有PD
属性?下一步我要做的是检查以确保所有这些对象都实际命中该行:removedMarkerarray[I].setMap(map)代码>请缩短问题并对其进行重构,这样会有一个无聊的、不相关的部分,您可以在其中编写任何您想要的内容,然后是一个包含真实问题的部分,这样我就可以专注于此。我已经清理了问题部分,并划分了一个问题部分。这就解释了我希望更好地回答的问题吗?您应该将for in
循环更改为经典的for
循环,正如我在下面的回答中所指出的,并放置控制台.log(removedMarker