2

我正在开发一个带有谷歌地图的应用程序,它应该在地图上显示几个类别。现在我想有可能从几个类别中添加标记并在必要时删除它们。

我设法弄清楚了整个事情。至少,几乎……我在删除一个类别的标记时遇到了麻烦。我在 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);
}

如您所见,我在对象中有“数据:类别”。这不是 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);
        }
    }
}

它确实删除了标记,但不是全部...有没有人可以解决我的问题?

现场演示

提前致谢,

海伦娜·S。

4

1 回答 1

2

似乎问题在于您正在迭代 newMarkers 数组并同时从中删除元素。
试试这个。它仅将数组中已删除的标记值设置为 null,然后在循环之后过滤这些 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; });

http://jsfiddle.net/GJUcy/

于 2013-04-14T20:36:16.270 回答