循环遍历映射的数组
Loop through array for map
我需要帮助遍历数组并完成此代码。我的数组是从 XML 文件创建的。XML 文件包含要在地图上绘制的会议地点数据。数组最终看起来像这样:
markerfilter[0].name
markerfilter[0].address
markerfilter[0].Meeting_Type
etc...
markerfilter[1].name
markerfilter[1].address
markerfilter[1].Meeting_Type
etc...
现在,所有标记都在地图上绘制。我需要遍历数组并根据我设置的一些变量对其进行过滤。这是我循环遍历数组的尝试:
for (var i = 0; i < markerfilter.length; i++) {
if (markerfilter[i].Meeting_Type==type&&markerfilter[i].Day_of_Meeting==day&&markerfilter[i].Time_of_Meeting==time){
//need to plot the points on the map here
}else{
//need to show blank map
}
}
这是我的整个代码。我什至不知道循环是否在正确的位置,或者是否需要将其他代码片段放入循环内部。有什么帮助吗??
$(document).ready(function() {
$("#map").css({
height: 500,
width: 600
});
var myLatLng = new google.maps.LatLng(43.653823, -79.382843);
MYMAP.init('#map', myLatLng, 11);
$("#showmarkers").click(function(e){
MYMAP.placeMarkers('include/xml.php');
});
});
var MYMAP = {
map: null,
bounds: null
}
MYMAP.init = function(selector, latLng, zoom) {
var myOptions = {
zoom:zoom,
center: latLng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
this.map = new google.maps.Map($(selector)[0], myOptions);
this.bounds = new google.maps.LatLngBounds();
}
var markerfilter = [];
MYMAP.placeMarkers = function(filename) {
$.get(filename, function(xml){
$(xml).find("marker").each(function(){
var name = $(this).find('name').text();
var address = $(this).find('address').text();
var address2 = $(this).find('address2').text();
var Meeting_Type = $(this).find('Meeting_Type').text();
var Time_of_Meeting = $(this).find('Time_of_Meeting').text();
var Day_of_Meeting = $(this).find('Day_of_Meeting').text();
var Open_Meeting = $(this).find('Open_Meeting').text();
var Wheelchair = $(this).find('Wheelchair').text();
var ASL = $(this).find('ASL').text();
var Comments = $(this).find('Comments').text();
// create a new LatLng point for the marker
var lat = $(this).find('lat').text();
var lng = $(this).find('lng').text();
var point = new google.maps.LatLng(parseFloat(lat),parseFloat(lng));
var markerdata = {};
$(this).children().each(function() {
markerdata[this.tagName] = $(this).text();
});
markerfilter.push(markerdata);
var MeetingType = document.getElementById("Meeting_Type");
var type = MeetingType.options[MeetingType.selectedIndex].text;
var DayofMeeting = document.getElementById("Day_of_Meeting");
var day = DayofMeeting.options[DayofMeeting.selectedIndex].text;
var TimeofMeeting = document.getElementById("Time_of_Meeting");
var time = TimeofMeeting.options[TimeofMeeting.selectedIndex].text;
for (var i = 0; i < markerfilter.length; i++) {
if (markerfilter[i].Meeting_Type==type&&markerfilter[i].Day_of_Meeting==day&&markerfilter[i].Time_of_Meeting==time){
markerfilter[i].setMap(MYMAP.map);
}else{
markerfilter[i].setMap(null);
}
}
// extend the bounds to include the new point
MYMAP.bounds.extend(point);
var marker = new google.maps.Marker({
position: point,
map: MYMAP.map
});
var infoWindow = new google.maps.InfoWindow();
var html='<b><u>'+name+'</b></u><br />'+address2+'<br />'+address+'<br />'+Meeting_Type+', '+Time_of_Meeting+', '+Day_of_Meeting+'<br />Open Meeting: '+Open_Meeting+'<br />Wheelchair Accessible: '+Wheelchair+'<br />ASL: '+ASL+'<br />Comments: '+Comments;
google.maps.event.addListener(marker, 'click', function() {
infoWindow.setContent(html);
infoWindow.open(MYMAP.map, marker);
});
MYMAP.map.fitBounds(MYMAP.bounds);
});
});
console.log(markerfilter);
}
现在,当我运行电流时,Firebug告诉我:markerfilter[i].setMap(null) 不是一个函数。
关于错误:markerfilter[i].setMap(null) 不是一个函数,我想我看到了你的问题。在 MYMAP.placemarkers
函数中,创建 markerdata
对象,定义某种分配了文本值的tagName
属性,然后将markerdata
推送到 :he markerfilter
数组
var markerdata = {};
$(this).children().each(function() {
markerdata[this.tagName] = $(this).text();
});
markerfilter.push(markerdata);
然后大约 10 行后,您有一个 for
循环,它尝试从 markerfilter
数组中检索代码似乎期望的标记:
for (var i = 0; i < markerfilter.length; i++) {
if ( markerfilter[i].Meeting_Type==type &&
markerfilter[i].Day_of_Meeting==day &&
markerfilter[i].Time_of_Meeting==time ) {
markerfilter[i].setMap( MYMAP.map );
}
else {
markerfilter[i].setMap( null );
}
}
由于markerfilter
数组已经加载了markerdata
,它不包含标记,所以markerfilter[i].setMap(null)
不是函数是有道理的,因为markerfilter[i]
不是标记。希望这有帮助 -
相关文章:
- 无法通过数组映射绑定
- React Native数组映射与多维数组
- 在JavaScript中搜索数组映射的最有效方法
- Undercore将对象的数组映射到以id为键的新对象
- 将一个外部二维数组映射到另一个二维数组(javascript)
- 如何将一个javascript数组映射到另一个具有不同字段名称的数组
- 数组映射和筛选顺序
- 如何使用 JavaScript 将此数组映射到新格式
- 使用 lodash 是将数据从数组映射到单个数组的好方法
- 将 json 数组中的数组映射到 Angularjs 范围
- 如何使用哈希图或数组映射返回总数最高的类别
- 当某些数据是可选的时,使用数组映射
- JavaScript 将数组映射到对象属性
- 角度中的数组映射错误
- 将数组映射变量替换为实际的变量名称/字符串
- 在用数组填充初始化的数组上使用数组映射的意外行为
- JavaScript 数组映射函数不会更改字符串中的元素
- 将 JSON 数组映射到 KO 抛出错误
- javascript 数组映射与应用
- 从 JQuery 中的字符串创建数组映射