【发布时间】:2011-09-06 00:52:32
【问题描述】:
如何检查谷歌地图标记是否已经在标记数组中?
即使在 markersArray.push(marker); 之后,条件 (marker in markersArray) 也是错误的。
【问题讨论】:
标签: javascript google-maps google-maps-api-3 google-maps-markers
如何检查谷歌地图标记是否已经在标记数组中?
即使在 markersArray.push(marker); 之后,条件 (marker in markersArray) 也是错误的。
【问题讨论】:
标签: javascript google-maps google-maps-api-3 google-maps-markers
var marker = new google.maps.Marker({
icon:icon,
position: position,
map: map
});
标记有自己的 ID。您可以通过
获取此 IDvar marker_id = marker.__gm_id;
然后在地图上获取标记
map.Hb.qa[marker_id];
【讨论】:
首先,(marker in markersArray) 是错误的,因为in 不会在数组中查找元素。
它寻找属性。
它对我的工作方式是
for (var i=0; i<markersArray.length; i++) {
if (markersArray[i].getPosition().equals(marker.getPosition())) {
...
只要您需要比较的只是标记的坐标,这就会起作用。
我们在这里使用 LatLng 类的 .equals 运算符。
【讨论】:
markersArray.indexOf(marker) > -1
【讨论】:
=== 运算符。
您应该遍历数组以检查标记。
for (var i=0; i<markersArray.length; i++) {
if (markersArray[i] === marker) {
//doSomething...
break;
}
}
【讨论】:
markersArray = {} (ii) 而不是推送,而是执行 markersArray['x_' + id] = marker; - 这会创建一个属性,例如markersArray.x_1234 (iii) 检查它是否存在 if(typeof markersArray['x_' + id] == 'undefined')。访问对象的属性可能比迭代包含 1000 多个元素的数组要快得多。