Javascript,从数组中读取变量

Javascript, reading variable from array

我在地图上显示我的自定义标记时遇到了一些问题,为了为每个位置显示不同的标记,我从也包含该位置的数组中获取图像,例如,这是我的代码:

var examplearray = [
    [43,    52.81421,   5.935412, 'image3']
    ];

    var image1 = 'mapsicons/alpha.png';
    var image2 = 'mapsicons/beta.png';
    var image3 = 'mapsicons/charlie.png';


    for (var i = 0; i < examplearray.length; i++) {
        var samplemarker = examplearray [i]
        var marker = new google.maps.Marker({
            position: new google.maps.LatLng (samplemarker[1], samplemarker[2]),
            map: map,
            icon: samplemarker[3],
            zIndex: samplemarker[0]
        });
    }

我看不出这里出了什么问题,但它不显示图像,为了清楚起见,图像位于正确的位置并且它们确实有效,如果我将 "samplemarker[3]" 更改为例如, image1 图标确实显示正确,将 "image3" 从数组更改为图像位置 (mapsicons/charlie.png) 也是如此,似乎从数组数据到变量数据的转换不起作用.希望您能帮帮我,先谢谢了!

我花了一些时间来理解这个想法。如果将 icon: samplemarker[3] 替换为 icon: this[samplemarker[3]] 会怎样?

另外两个选项:

  1. 将图标的URL添加到数组中。代替:

    var examplearray = [ [43, 52.81421, 5.935412, 'image3'] ];

使用:

var examplearray = [
  [43,    52.81421,   5.935412, 'mapsicons/charlie.png']
];

Proof of concept fiddle

  1. 引用数组中的变量而不是使用带有名称的字符串:

而不是:

var examplearray = [
  [43,    52.81421,   5.935412, 'image3']
];

使用:

var examplearray = [
  [43,    52.81421,   5.935412, image3]
];

proof of concept fiddle

代码片段(选项 1):

function initialize() {
  var map = new google.maps.Map(
    document.getElementById("map_canvas"), {
      center: new google.maps.LatLng(37.4419, -122.1419),
      zoom: 13,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });
  var examplearray = [
    [43, 52.81421, 5.935412, 'http://maps.google.com/mapfiles/ms/micons/yellow.png']
  ];

  var bounds = new google.maps.LatLngBounds();
  for (var i = 0; i < examplearray.length; i++) {
    var samplemarker = examplearray[i];
    var marker = new google.maps.Marker({
      position: new google.maps.LatLng(samplemarker[1], samplemarker[2]),
      map: map,
      icon: samplemarker[3],
      zIndex: samplemarker[0]
    });
    bounds.extend(marker.getPosition());
  }
  map.fitBounds(bounds);
}
google.maps.event.addDomListener(window, "load", initialize);
html,
body,
#map_canvas {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="map_canvas"></div>

代码片段(选项 2):

function initialize() {
  var map = new google.maps.Map(
    document.getElementById("map_canvas"), {
      center: new google.maps.LatLng(37.4419, -122.1419),
      zoom: 13,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });
  var image1 = 'http://maps.google.com/mapfiles/ms/micons/blue.png';
  var image2 = 'http://maps.google.com/mapfiles/ms/micons/green.png';
  var image3 = 'http://maps.google.com/mapfiles/ms/micons/yellow.png';
  var examplearray = [
    [43, 52.81421, 5.935412, image3]
  ];

  var bounds = new google.maps.LatLngBounds();
  for (var i = 0; i < examplearray.length; i++) {
    var samplemarker = examplearray[i];
    var marker = new google.maps.Marker({
      position: new google.maps.LatLng(samplemarker[1], samplemarker[2]),
      map: map,
      icon: samplemarker[3],
      zIndex: samplemarker[0]
    });
    bounds.extend(marker.getPosition());
  }
  map.fitBounds(bounds);
}
google.maps.event.addDomListener(window, "load", initialize);
html,
body,
#map_canvas {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="map_canvas"></div>