从嵌套数组添加谷歌地图标记

时间:2016-03-12 22:49:45

标签: javascript google-maps google-maps-api-3

我已使用此代码成功将标记添加到地图中:

var film = [
[ "12 Years a Slave",-90.0715323,29.9510658,"2013"],
[ "12 Years a Slave",-90.7197143,30.0110809,"2013"]];

for (i = 0; i < film.length; i++) {  
  marker = new google.maps.Marker({
  position: new google.maps.LatLng(film[i][2], film[i][1]),
});

我已将我的阵列更改为嵌套格式,因为我希望能够一次打开一部电影的标记,而不是一次全部打开。

var film = [["12 Years a Slave","2013",[[-90.3517469,29.9429828],[-90.1525373,29.9502543]]],
["The Life of Emile Zola","1937",[[-117.7603323,33.5141933],[-118.3387185,34.1486546]]]];

如何一次打开所有标记,或者只为一部电影打开它?我是否需要在此循环中使用第二种类型的for循环?

1 个答案:

答案 0 :(得分:2)

是的,你需要第二个for循环来浏览每个电影的位置(因为现在一部电影有超过1个位置)。

根据您的上述代码,这应该可以解决问题:

// Go through each film
for (i = 0; i < film.length; i++) {
  // Display the film marker.
  displayFilm(film[i])
}

/**
 * Function to display a single film.
 *
 * @param filmData array of film data structured as (name, year, list of positions)
 */
function displayFilm(filmData) {
  var positions = filmData[2];
  // Go through all positions of a film
  for (j = 0; j < positions.length; j++) {
    // Show marker
    marker = new google.maps.Marker({
      position: new google.maps.LatLng(positions[j][1], positions[j][0])
    });
  }
}

要显示单个影片,请使用displayFilm功能。要显示所有这些,请使用第一个for循环来调用每部电影的功能。