如何消除Javascript中的重复行?

如何消除Javascript中的重复行?,javascript,object,optimization,google-maps-api-3,marker,Javascript,Object,Optimization,Google Maps Api 3,Marker,我有一个Javascript文件,可以向自定义Google地图添加标记,下面是我的代码: 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,

我有一个Javascript文件,可以向自定义Google地图添加标记,下面是我的代码:

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
}),
对于我所拥有的每个位置,它都是这样

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

总结一下,我的问题是:我该如何做才能摆脱这些重复的台词?


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

您可以创建一个助手函数,创建一个新的标记对象,为其赋值,然后将其推送到位置数组

例如:

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 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=功能(lat、lng、YTD){
返回新的google.maps.Marker({
位置:新google.maps.LatLng(lat,lng),
url:“http://www.youtube.com/watch?v=“+ytId,
地图:地图,
图标:图像
})
};
var createLocations=函数(位置){
var标记=[];
对于(变量i=位置.length;i>0;--i){
var l=位置[i];
markers.push(createLocationMarker(l.lat,l.lng,l.yt));
}
返回标记;
};
//静态声明或ajax请求的结果:
变量位置=[
{lat:43.670231,液化天然气:-79.386821,yt:'NX7QNWEGcNI'},//Bloor站
{lat:43.674759,lng:-79.366643,yt:'NX7QNWEGcNI'},//弗兰克城堡大桥
{ } // ...
];
变量标记=创建位置(位置);
函数怎么样

var createLocationMarker=功能(lat、lng、YTD){
返回新的google.maps.Marker({
位置:新google.maps.LatLng(lat,lng),
url:“http://www.youtube.com/watch?v=“+ytId,
地图:地图,
图标:图像
})
};
var createLocations=函数(位置){
var标记=[];
对于(变量i=位置.length;i>0;--i){
var l=位置[i];
markers.push(createLocationMarker(l.lat,l.lng,l.yt));
}
返回标记;
};
//静态声明或ajax请求的结果:
变量位置=[
{lat:43.670231,液化天然气:-79.386821,yt:'NX7QNWEGcNI'},//Bloor站
{lat:43.674759,lng:-79.366643,yt:'NX7QNWEGcNI'},//弗兰克城堡大桥
{ } // ...
];
变量标记=创建位置(位置);

我自己没有使用谷歌地图,但看看这一点,你可以这样做:

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();
var位置=[];
函数addLocations(){
//注意:我刚刚复制了第一个值以节省时间,您需要交换第二个值
//第三个是您需要的值:
//职位
var假设=[
{lat:43.670231,lon:-79.386821},
{lat:43.670231,lon:-79.386821},
{lat:43.670231,lon:-79.386821}
];
//网址
变量URL=[
"http://www.youtube.com/watch?v=NX7QNWEGcNI",
"http://www.youtube.com/watch?v=NX7QNWEGcNI",
"http://www.youtube.com/watch?v=NX7QNWEGcNI"
];
//现在,使用循环创建位置:
对于(变量i=0;i<3;i++){
//使用上面数组中的值放入数组:
位置[i]=新的google.maps.Marker({
位置:新建google.maps.LatLng(posits[i].lat,posits[i].lon),
url:url[i],
地图:地图,
图标:图像
});
}
}
//需要时调用函数
添加位置();
如果在函数中保留posits/url的数组,它们将在使用后从内存中删除,如果您需要再次引用它们,您可以将它们设置为全局数组,但除非您必须这样做,否则我不会这样做-我假定数据可以在使用后从locations数组中的对象中引用


此外-没有理由说URL不能在存储lat/long数据的对象中,另一个答案是这样的,我写出来是为了可读性,但这确实是个人的选择。

我自己没有使用谷歌地图,但看看这个,你可以做如下操作:

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();
var位置=[];
函数addLocations(){
//注意:我刚刚复制了第一个值以节省时间,您需要交换第二个值
//第三个是您需要的值:
//职位
var假设=[
{lat:43.670231,lon:-79.386821},
{lat:43.670231,lon:-79.386821},
{lat:43.670231,lon:-79.386821}
];
//网址
变量URL=[
"http://www.youtube.com/watch?v=NX7QNWEGcNI",
"http://www.youtube.com/watch?v=NX7QNWEGcNI",
"http://www.youtube.com/watch?v=NX7QNWEGcNI"
];
//现在,使用循环创建位置:
对于(变量i=0;i<3;i++){
//使用上面数组中的值放入数组:
位置[i]=新的google.maps.Marker({
位置:新建google.maps.LatLng(posits[i].lat,posits[i].lon),
url:url[i],
地图:地图,
图标:图像
});
}
}
//需要时调用函数
添加位置();
如果在函数中保留posits/url的数组,它们将在使用后从内存中删除,如果您需要再次引用它们,您可以将它们设置为全局数组,但除非您必须这样做,否则我不会这样做-我假定数据可以在使用后从locations数组中的对象中引用

还有-没有理由说URL不能在存储lat/long数据的对象中,另一个答案是这样的,我写出来是为了可读性,但这确实是个人的选择