ответ

5

Во-первых, (marker in markersArray) неверно, так как in не ищет элементов в массиве.
Он ищет недвижимость.

Как это работает для меня был

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

Это работает до тех пор, как то, что вам нужно сравнить только координаты маркеров.
Мы используем здесь оператор классов .LalLng.

2

Вы должны пройти через массив, чтобы проверить маркер.

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

@rob, так что если у меня есть, скажем, в 1000 маркеров на карте и я панорамирование карту просто чтобы все маркеры все еще отображались, и мне сказали не удалять и добавлять снова маркеры, но сначала проверить, если они уже есть, так что это означало бы, что для каждого из 1000 маркеров мне придется усреднить пройти через половину массива. Это может привести к 500 000 проверок, в худшем случае. Разве не было бы меньше потреблять просто удалить все 1000 маркеров, а затем добавить их обратно? – Ash

+1

Я сомневаюсь, что было бы лучше удалить и добавить их обратно, так как для этого процесса существует достаточное количество накладных расходов. Один из вариантов, если у вас проблема с производительностью, заключается в том, чтобы хранить маркеры отдельно в таблице поиска, так что вам действительно не нужно выполнять итерацию. Если у вас есть уникальный идентификатор для каждого маркера, вы можете использовать его как имя члена в объекте. Существуют различные другие способы, которые вы могли бы использовать, чтобы отслеживать их, поскольку вы, вероятно, создаете, добавляете и удаляете эти маркеры самостоятельно. – rob

+0

@Ash: вы добавляете маркеры в видимую область и скрываете те, которые находятся в невидимой области, когда карта подкрашена? –

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

Я не уверен, что могу использовать его в моем случае, так как мне нужно создать экземпляр маркера, чтобы он мог его сравнивать, но если я его создам, то этот экземпляр не может быть действительно в массиве. Я думаю, что я должен использовать оператор '==='. – Ash

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

Маркеры имеют собственный идентификатор. Вы можете получить этот идентификатор с помощью

var marker_id = marker.__gm_id; 

, а затем получить маркер на карте

map.Hb.qa[marker_id]; 
Смежные вопросы