7

我在 Javascript 中遇到了这个问题:我想从对象数组中获取经度和纬度值。这一切都很好,但是当我尝试将其保存到全局数组中时,它会覆盖以前的每个值。结果是一个数组,其中包含最后一个推送对象的 8 倍。

全局数组:var _coordinates = [];

function getCoordinates()
{
   mark = {};

   for(var key in _data)
   {
       if(_data.hasOwnProperty(key)){
           mark["lng"] = _data[key].long;
           mark["lat"] = _data[key].lat;
       }

       console.log(mark); // Returns different coordinates (yay)
       _coordinates.push(mark);

   }   

   console.log(_coordinates); // All coordinates are the same (meh)
}

这是我第一次在这里提问。所以如果我忘记了什么,请说出来。

4

3 回答 3

6

您可以尝试mark在循环内声明和实例化对象,for因为现在您一直在修改同一个实例:

function getCoordinates() {
    for(var key in _data) {
        var mark = {};
        if(_data.hasOwnProperty(key)) {
            mark["lng"] = _data[key].long;
            mark["lat"] = _data[key].lat;
        }
        _coordinates.push(mark);
    }   

    console.log(_coordinates);
}
于 2013-08-21T15:35:39.450 回答
2

问题是您反复修改同一个对象。您的数组最终包含对该对象的八个引用。

修复,移动

mark = {};

进入for循环。

于 2013-08-21T15:35:52.593 回答
1

mark您在每个循环中都在改变(全局)变量。改为这样做

_coordinates.push({lng: _data[key].long, lat: data[key].lat});
于 2013-08-21T15:36:04.610 回答