我正在使用Google Maps Javascript API程序,在按预期设置数组时遇到了一些问题。
上下文:初始化映射时,读取一个Geojson文件,并从其信息中创建一组标记(红色引脚(。一旦创建,这些标记就会被分组到一个集群中。还要注意,每个条目都有一个ClientType,它是大约6个字符串中的1个,例如"Sales"或"Utility">
Desire:集群的一个变量,var mapClusters[],indesities作为ClientTypes。例如,mapClusters['Utility']将返回数组中~6的一个集群,该集群使用ClientType=Utility对标记进行集群。
然后,我想为Markers再添加一个变量,var mapMarkers[][]。例如,mapMarkers[‘Sales’][3]将是Sales组中的第4个标记。此"销售"组中对象的顺序无关紧要。
代码:
var mapMarkers = [ ['Utility'], ['Court'], ['Sales'], ['Licensing'], ['Other'], ['Prospect'] ]; //2d array, ex: mapMarkers['Sales'][3]
var mapClusters = []; //1d array, ex: mapClusters['Utility']
....
( at the end of initMap() )
( for each entry in the GeoJson, generate var Marker for it and show on map. var clientType = the string value from the Geojson, such as 'Sales' )
mapMarkers[clientType].push(marker);
....
( after all markers have been generated, called for each Client Type )
mapClusters[clientType] = new MarkerCluster(...); //is null until first time this is called
错误:我遇到了问题,特别是在"mapMarkers[clientType].prush(marker("和获得错误"Unaught TypeError:无法读取未定义的属性"push"时。我也不确定mapClusters是否以正确的方式使用,但在运行时还没有到达代码的那一部分,以获得任何特定的错误。
谢谢你的帮助!
您似乎对mapMarkers
变量进行了错误的初始化。初始化该变量的方法是生成一个数组(每个数组的长度等于1(,即每个数组中都有一个字符串。正如你可以在下一个例子中看到的那样,我展示了如何操作这个结构:
var mapMarkers = [ ['Utility'], ['Court'], ['Sales'], ['Licensing'], ['Other'], ['Prospect'] ];
// Display the structure format:
console.log(mapMarkers);
// Display first array inside.
console.log("First array of mapMarkers: ", mapMarkers[0]);
// Display the first element of the first array.
console.log("First element inside first array: ", mapMarkers[0][0]);
// Push new element on first array.
mapMarkers[0].push("Hello");
console.log(mapMarkers);
对于您的特定目标,最好使用下一个初始化,它表示一个具有属性的对象,其中每个属性都包含一个空数组(在初始化时(:
var mapMarkers = {'Utility': [], 'Court': [], 'Sales': [], 'Licensing': [], 'Other': [], 'Prospect': []};
使用前面的初始化,您可以按照预期的方式操作结构,正如您可以查看下一个示例:
var mapMarkers = {"Utility": [], "Court": [], "Sales": [], "Licensing": [], "Other": [], "Prospect": []};
// Display the structure format:
console.log(mapMarkers);
// Display the array saved on the "Utility" property.
console.log("Utility array: ", mapMarkers["Utility"]);
// Push new elements on "Sales" array.
mapMarkers["Sales"].push("Sale1");
mapMarkers["Sales"].push("Sale2");
mapMarkers["Sales"].push("Sale3");
// Display the "Sales" array.
console.log("Sales Array: ", mapMarkers["Sales"]);
// Display second element of "Sales" array.
console.log("Second element of Sales array: ", mapMarkers["Sales"][1]);
// Display the structure after adding elements:
console.log(mapMarkers);