我正在使用谷歌地图开发一个应用程序,它应该在地图上显示几个类别。现在我想有可能添加几个类别的标记,并在必要时删除它们。
我已经设法弄明白了。至少,几乎......我在删除某个类别的标记时遇到了麻烦。我已经在jsfiddle上创建了一个现场演示,以明确这一点。 所以这就是我尝试这样做的方式:
首先我初始化地图等(但这与此无关)。然后我在地图上添加标记:
for(i in markers){
var marker = new google.maps.Marker({
map: map,
draggable: false,
position: new google.maps.LatLng(markers[i].latitude, markers[i].longitude),
visible: true,
data: category
});
newMarkers.push(marker);
}
正如您所看到的,我在对象中有'data:category'。这不是google maps api,但是它没有给我任何错误,并且当我想删除标记时,我可以搜索数组。这里是removeMarker函数:
function removeMarkers(category)
{
for(i in newMarkers) {
if(newMarkers[i]['data'] == category){
count ++;
newMarkers[i].setMap(null);
newMarkers.splice(i, 1);
}
}
}
它确实删除了标记,但并非全部删除... 有没有人能解决我的问题?
提前致谢,
Helena S。
答案 0 :(得分:2)
似乎问题是您正在迭代newMarkers数组并同时从中移除元素。
试试这个。它只将数组中删除的标记值设置为null,然后在循环之后过滤那些空值:
for(i in newMarkers) {
if(newMarkers[i]['data'] == category){
count ++
newMarkers[i].setMap(null);
newMarkers[i] = null;
}
}
newMarkers = newMarkers.filter(function(val){ return !!val; });