全局变量只返回循环中最后一个实例的值

Global variable only returns value from the last instance in a loop

本文关键字:实例 最后一个 返回 循环 全局变量      更新时间:2023-09-26

我在ajax请求之外创建了一个全局变量;var pos = [];收集来自我的api的特定"作业"的经纬度信息。"Jobs"在ajax请求之外也有它自己的全局变量,用于收集每个作业(var Jobs = [];)的数据数组。在ajax请求中,我使用了通用的Jobs = data来为成功时在请求中收集的数据设置变量值(success: function (data) {Jobs = data; ...)。然后使用Jobs.forEach循环遍历每个Job。然后在为每个作业创建的标记上使用.getLatLng传单方法为pos变量赋值。我的问题是,当我尝试在forEach循环之外调用pos变量(我使用console.log(pos);进行测试)时,它只返回最后一个实例。有什么建议我做错了吗?我的简化代码如下。注意:我试图在另一个请求中调用pos,但它适用于全局Jobs变量。

var grid = L.geoJson();
var Jobs = {};
var pos = [];
//var control = L.control.layers(grid).addTo(map);
// This is the ajax request for the jobs data
$.ajax({
  type: 'GET',
  url: url,
  timeout: 8000,
  crossDomain: true,
  dataType: 'json',
  data: Jobs,
  ...
  //Renders data to view
  success: function (data) {
    Jobs = data;
    Jobs.forEach(function (value) {
      console.log (pos);
      ...
      var latitude = value.latitude;
      var longitude = value.longitude;
      ...
      var marker = L.marker([value.latitude, value.longitude]).addTo(map);
      pos = marker.getLatLng();
      ...  
      console.log (pos);
    }); 
   // Fetch the file data making the grid       
    $.getJSON('./grid.geojson', function (data) {
       // Assign the results to the geojsonData variable
      console.log(Jobs);
      console.log(pos);

每次都用新的标记覆盖pos变量。pos = marker.getLatLng();

相反,您需要将新值.push添加到数组中,这会将每个新值添加到数组

pos.push(marker.getLatLng()); //['marker1']

那么下一次循环运行时,将添加下一个标记

pos.push(marker.getLatLng()); //['marker1', 'marker2']
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/push