Javascript 数组的旧值替换为数组的新值

Javascript 数组的旧值替换为数组的新值,javascript,arrays,google-maps,Javascript,Arrays,Google Maps,我想做的是点击谷歌地图的onclick。正在尝试创建包含地址的数组。问题是当我提醒数组时,它只显示当前值。 我还尝试了waypts.length,它只会提醒1。这意味着当我点击谷歌地图时,数组值被替换。 那么问题出在哪里呢 代码: 函数初始化(){ var geocoder=new google.maps.geocoder(); var-waypts=[]; 变量映射选项={ 缩放:11, 中心:新google.maps.LatLng(23.0171240,72.5330533), mapTyp

我想做的是点击谷歌地图的
onclick
。正在尝试创建包含地址的数组。问题是当我提醒数组时,它只显示当前值。
我还尝试了
waypts.length
,它只会提醒1。这意味着当我点击谷歌地图时,数组值被替换。 那么问题出在哪里呢

代码:

函数初始化(){
var geocoder=new google.maps.geocoder();
var-waypts=[];
变量映射选项={
缩放:11,
中心:新google.maps.LatLng(23.0171240,72.5330533),
mapTypeId:google.maps.mapTypeId.ROADMAP
};
var map=new google.maps.map(document.getElementById('map_canvas'),mapOptions);
google.maps.event.addListener(映射,'click',函数(e){
地点标记(如板条、地图);
var输入=e.latLng;
var lat=parseFloat(input.lat());
var lng=parseFloat(input.lng());
var latlng=新的google.maps.latlng(lat,lng);
geocoder.geocode({'latLng':latLng},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
var add=results[0]。格式化的\u地址;
推({
地点:add,
中途停留:对
});
var lngth=路径长度;
警报(JSON.stringify(waypts));
}
});
var方向显示;
var directionsService=new google.maps.directionsService();
//directionsDisplay=new google.maps.DirectionsRenderer();
directionsDisplay=新建google.maps.DirectionsRenderer({
suppressMarkers:true,//如果您希望从方向服务获得标记,则为false
多段线选项:{
strokeColor:'绿色',/“黑色”,
笔划不透明度:1.0,
冲程重量:3
}
});
var lngth=路径长度;
var start=waypts[0][0];/“印度古吉拉特邦艾哈迈达巴德的博帕尔”;
var end=waypts[waypts.length-1][0];/“印度古吉拉特邦艾哈迈达巴德尼科尔”;
//从阵列中删除起始目标
var a=waypts.shift();
//从阵列中删除结束目标
waypts.pop();
var请求={
来源:start,
目的地:完,
航路点:航路点,
travelMode:google.maps.Directions travelMode.DRIVING
};
路由(请求、功能(响应、状态){
if(status==google.maps.directionstatus.OK){
方向显示。设置方向(响应);
}
});
方向显示.setMap(地图);
});
}
功能位置标记(位置、地图){
var marker=new google.maps.marker({
职位:职位,,
地图:地图
});
潘托地图(位置);
}
google.maps.event.addDomListener(窗口“加载”,初始化);

提前感谢。

我假设这在函数中存在

代码的问题可能是
waypts
被设置为局部变量

如果在其他地方引用,则无法获取该值

每次调用函数时都会重新初始化变量,因此数组中存储的任何以前的值都将丢失


waypts
设为全局,并尝试在函数外部定义变量。

我更新了这个问题。数组变量在函数内部。你是否重复调用函数,并通过这些重复调用将值推送到
waypts
?每当我点击谷歌地图时,这个函数调用
google.maps.event.addListener(映射,'click',函数(e){
。是否在此调用
initialize()
?您需要将变量
waypts
设置为全局变量。这可以通过将
var waypts=[];
放置在函数外部来完成。之后的所有地方都将引用该变量。
  function initialize() {
  var geocoder = new google.maps.Geocoder();
  var waypts=[];
  var mapOptions = {
   zoom: 11,
   center: new google.maps.LatLng(23.0171240, 72.5330533),
   mapTypeId: google.maps.MapTypeId.ROADMAP
   };
   var map = new google.maps.Map(document.getElementById('map_canvas'),mapOptions);
  google.maps.event.addListener(map, 'click', function(e) {
  placeMarker(e.latLng, map);
  var input=e.latLng;
  var lat = parseFloat(input.lat());
  var lng = parseFloat(input.lng());
  var latlng = new google.maps.LatLng(lat, lng);
  geocoder.geocode({'latLng': latlng}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
       var add=results[0].formatted_address;
       waypts.push({
        location:add,
        stopover:true
       });
       var lngth=waypts.length;
       alert(JSON.stringify(waypts));
    }
  });
          <!--  **************    for route between markers   *******************  -->
  var directionsDisplay;
  var directionsService = new google.maps.DirectionsService();
  //directionsDisplay = new google.maps.DirectionsRenderer();
  directionsDisplay = new google.maps.DirectionsRenderer({
  suppressMarkers: true, //false it if you want a marker from the direction service 
  polylineOptions: {
      strokeColor: 'green', //"black",
      strokeOpacity: 1.0,
      strokeWeight: 3
    }
  });

    var lngth=waypts.length;
    var start = waypts[0][0];//"Bopal, Ahmedabad, Gujarat, India";
    var end = waypts[waypts.length-1][0];//"Nikol, Ahmedabad, Gujarat, India";

    //remove start destination from array
    var a=waypts.shift();
    //remove end destination from array
    waypts.pop();

    var request = {
          origin:start,
          destination:end,
          waypoints:waypts,
          travelMode: google.maps.DirectionsTravelMode.DRIVING
    };

    directionsService.route(request, function(response, status) {
        if (status == google.maps.DirectionsStatus.OK) {
          directionsDisplay.setDirections(response);
        }
    });
    directionsDisplay.setMap(map);

 });


}
   function placeMarker(position, map) {
  var marker = new google.maps.Marker({
    position: position,
    map: map
  });
  map.panTo(position);
}

google.maps.event.addDomListener(window, 'load', initialize);