我知道这是一个常见的问题,而且我是一名JS新手,但即使在搜索StackOverflow几个小时之后,我也完全难过了。
我正在使用Google Maps API,并希望通过与ID关联来跟踪我的标记。所以我将var pinArray = new Object()
作为全局变量,并添加如下标记:
function CreateMarkers (data){
data.forEach(function(store) {
<!-- CREATE MAP MARKER -->
var mapLat = store.latitude;
var mapLong = store.longitude;
var mapLatLng = { lat: parseFloat(mapLat), lng: parseFloat(mapLong) };
var marker = new google.maps.Marker({
position: mapLatLng,
title: store.name,
icon: {
path: google.maps.SymbolPath.CIRCLE,
scale: 8.5,
fillColor: 'Green',
fillOpacity: 0.8,
strokeWeight: 0.6,
},
zIndex: 0
});
cluster.addMarker(marker);
var key = store.Id;
pinArray['${key}'] = marker;
})
}
cluster
为var cluster = new MarkerClusterer(map);
。
当我尝试在函数外部执行console.log(pinArray);
时,我得到一个空对象: Object {}
。我也尝试过不使用字符串插值,例如pinArray[store.Id] = marker;
,但也遇到同样的问题。
我需要在引脚和ID之间保持这种全局关联,因为我需要在其他函数中通过ID来引用和更新标记。或者至少,我认为我这样做,我对其他方式持开放态度。非常感谢帮助;提前谢谢你。
答案 0 :(得分:2)
通常,当我过去做过类似的事情时,我会使用标准的javascript数组而不是ID对象:
var pinArray = [];
然后使用push将标记添加到其中:
pinArray.push(Marker);
创建引脚时,可以在属性定义中包含密钥:
var marker = new google.maps.Marker({
position: mapLatLng,
title: store.name,
icon: {
path: google.maps.SymbolPath.CIRCLE,
scale: 8.5,
fillColor: 'Green',
fillOpacity: 0.8,
strokeWeight: 0.6,
},
zIndex: 0,
key: store.Id
});
如果您需要通过ID拉取它们,您可以编写一个简单的循环查找函数来查找单个地图标记。类似的东西:
function GetMarkerByKey(key) {
var i = 0;
while (pinArray[i].key != key) {i++}
return pinArray[i];
}
此外,如果您在动态事件处理程序中使用它进行单击或悬停,则可以使用此属性来识别它们正在激活它的标记。
~~~编辑修复语法错误~~~
答案 1 :(得分:2)
var pinArray
在其定义的函数范围内分配变量。无论您在函数中的哪个位置,确保将变量定义为全局变量的最安全方法是将其分配给window
。
window.pinArray = new Object();