回答

5

首先,(marker in markersArray)是因为in错误不会查找数组中的元素。
它寻找属性。

它为我工作的方式是

for (var i=0; i<markersArray.length; i++) { 
    if (markersArray[i].getPosition().equals(marker.getPosition())) { 
... 

这只要工作,因为你需要什么相比只是标记的座标。
我们在这里使用LatLng类的.equals运算符。

2

您应该遍历数组以检查标记。

for (var i=0; i<markersArray.length; i++) { 
    if (markersArray[i] === marker) { 
    //doSomething... 
    break; 
    } 
    } 
+0

@rob标记,所以如果我有,比方说,一个1000个标记在地图上,我平移地图只是一个所以所有的标记仍然应该出现,并且我被告知不要删除并再次添加标记,而是先检查它们是否已经存在,这意味着对于1000个标记中的每一个,我将不得不平均地通过数组的一半。在最坏的情况下,这可能会导致500,000次检查。仅仅删除所有1000个标记然后将它们添加回来不是不那么耗时? – Ash 2011-06-01 07:20:17

+1

我怀疑删除并将它们添加回来会更好,因为该过程有相当多的开销。一种选择,如果你有性能问题,可以将你的标记分开存储在查找表中,这样你就不必迭代了。如果每个标记都有唯一的标识符,则可以将其用作对象中的成员名称。您可以使用其他各种方法来跟踪它们,因为您大概是在自己创建,添加和删除这些标记。 – rob 2011-06-01 07:32:28

+0

@Ash:当地图平移时,是否将标记添加到可见区域并隐藏不可见区域中的标记? – 2011-06-01 07:50:23

-1
markersArray.indexOf(marker) > -1 
+0

林不知道我可以在我的情况下使用它,因为我必须创建一个标记的实例,以便能够比较它,但如果我创建它比实例不能真正在数组中。我想我必须使用'==='运算符。 – Ash 2011-06-01 08:15:02

0
var marker = new google.maps.Marker({ 
          icon:icon, 
          position: position, 
          map: map 
         }); 

标记有自己的ID。您可以通过

var marker_id = marker.__gm_id; 

得到这个ID,然后获取地图

map.Hb.qa[marker_id];