如何消除Javascript中的重复行

How to rid repeating lines in Javascript?

本文关键字:何消 Javascript      更新时间:2023-09-26

我有一个Javascript文件,它将标记添加到自定义谷歌地图,这是我的代码:

var locations = [
    // Bloor Station
    new google.maps.Marker({
      position: new google.maps.LatLng(43.670231, -79.386821),
      url: "http://www.youtube.com/watch?v=NX7QNWEGcNI",
      map: map,
      icon: image
    }),
    // Castle Frank Bridge
    new google.maps.Marker({
      position: new google.maps.LatLng(43.674759, -79.366643),
      url: "http://www.youtube.com/watch?v=NX7QNWEGcNI",
      map: map,
      icon: image
    }),
// Simeon Park
new google.maps.Marker({
  position: new google.maps.LatLng(43.792333395471275, -79.38898265361786),
  url: "http://www.youtube.com/watch?v=NX7QNWEGcNI",
  map: map,
  icon: image
}),

对于每个位置,它都像这样继续。

我的问题是,我使用相同的地图和图像为每个标记;此外,我还想添加其他变量到所有位置,而不必为每个标记写同一行;随着位置的增加,重复的行也会增加,这可能会很麻烦。

总之,我的问题是:我如何使它能够摆脱这些重复的行?

我试图运行一个for循环来初始化每个声明URL和每个位置后,但这不起作用。

您可以创建一个辅助函数来创建一个新的Marker对象,为其赋值,然后将其推入locations数组。

的例子:

var locations = [];
function addMarker(lat, long, url) {
  var marker = new google.maps.Marker({
    position: new google.maps.LatLng(lat, long),
    url: url,
    map: map,
    icon: image
  });
  locations.push(marker);
}

然后调用addMarker来添加新的标记

addMarker(43.792333395471275, -79.38898265361786, "url");

函数呢?

var createLocationMarker = function(lat, lng, ytId) {
  return new google.maps.Marker({
    position: new google.maps.LatLng(lat, lng),
    url: "http://www.youtube.com/watch?v=" + ytId,
    map: map,
    icon: image
  })
};
var createLocations = function(locations) {
  var markers = [];
  for (var i = locations.length; i > 0; --i) {
    var l = locations[i];
    markers.push(createLocationMarker(l.lat, l.lng, l.yt));
  }
  return markers;
};
// static declaration, or result of an ajax request:
var locations = [
  { lat: 43.670231, lng: -79.386821, yt: 'NX7QNWEGcNI' }, // Bloor Station
  { lat: 43.674759, lng: -79.366643, yt: 'NX7QNWEGcNI' }, // Castle Frank Bridge
  { } // ...
];
var markers = createLocations(locations);

我没有使用过谷歌地图但是看看这个,你可以这样做:

var locations = [];
function addLocations(){
//NB I just copied the first value to save time, you'll need to swap the second 
//and third out for the values you need:
//Positions
var posits = [
{lat: 43.670231, lon: -79.386821},
{lat: 43.670231, lon: -79.386821},
{lat: 43.670231, lon: -79.386821}
];
//URLs
var urls = [
"http://www.youtube.com/watch?v=NX7QNWEGcNI",
"http://www.youtube.com/watch?v=NX7QNWEGcNI",
"http://www.youtube.com/watch?v=NX7QNWEGcNI"
];
//Now, use a loop to create the locations:
for(var i = 0; i < 3; i++){
    //Place in array using values in arrays above:
    locations[i] = new google.maps.Marker({
    position: new google.maps.LatLng(posits[i].lat, posits[i].lon),
    url: urls[i],
    map: map,
    icon: image
    });
}
}
//Invoke function when desired
addLocations();

如果你在函数中保留位置/url的数组,它们将在使用后从内存中删除,如果你需要再次引用它们,你可以使它们成为全局的,但除非你必须这样做,我不会-我假设数据可以在之后从位置数组中的对象中引用。

也-没有理由为什么url不能在对象中存储晚/长数据,另一个答案是这样的,我写出来是为了可读性,但这真的是个人的选择