我有一个谷歌地图涉及几个不同的数据数组,我无法有效地编写部分数据。例如,我有这个代码块,并希望将它变成一个函数,它为各种不同的名称而不仅仅是Wilma运行相同的东西。我可以很容易地创建一个包含名称的数组,并将其作为参数传递,但那么我将如何构建像“data_NAME [k] [3]”这样的数组名称?我想将字符串与数组名称的一部分连接起来一定很简单,但我仍然坚持语法。非常感谢任何帮助。
if (currentcroc == 'Wilma') {
for (k = 0; k < data_wilma.length; k++) {
var pointmarker = new google.maps.Marker({
position: latlng_wilma[k],
icon: markerType['point'+data_wilma[k][3]],
shadow: markerType['pointshadow'],
shape: pointshape,
map:map,
zIndex: 4
});
pointarray.push(pointmarker);
(function (k, pointmarker) {
google.maps.event.addListener(pointmarker, 'mouseover', function() {
tooltip.show('Wilma: '+data_wilma[k][2]);
});
google.maps.event.addListener(pointmarker, 'mouseout', function() {
tooltip.hide();
});
})(k, pointmarker);
}
}
答案 0 :(得分:3)
使用关键数组(map),其中键是名称(例如wilma
),值为2d数组:
var nameToDataMap = {
wilma: [ [0, 1, 2],
[3, 4, 5],
[6, 7, 8]
],
fred: [ [0, 1, 2],
[3, 4, 5],
[6, 7, 8]
]
};
var nameToLatLongMap = {
wilma: [ ... ],
fred: [ ... ]
};
然后您的代码变为:
var data = nameToDataMap[currentcroc];
var latLong = nameToLatLongMap[currentcroc];
for (k = 0; k < data.length; k++) {
var pointmarker = new google.maps.Marker({
position: latLong[k],
icon: markerType['point' + data[k][3]],
shadow: markerType['pointshadow'],
shape: pointshape,
map:map,
zIndex: 4
});
pointarray.push(pointmarker);
(function (k, pointmarker) {
google.maps.event.addListener(pointmarker, 'mouseover', function() {
tooltip.show(currentcroc + ': ' + data[k][2]);
});
google.maps.event.addListener(pointmarker, 'mouseout', function() {
tooltip.hide();
});
})(k, pointmarker);
}
答案 1 :(得分:0)
只要您从某个地方访问该属性(例如,如果它是本地的),您就可以将属性作为关键字段进行访问。
例如
tooltip.show('Wilma: ' + this['data_' + 'wilma'][k][2]);
根据需要应用变量名称和抽象:)