Javascript将对象推送到全局数组覆盖以前的值?

Javascript将对象推送到全局数组覆盖以前的值?,javascript,arrays,Javascript,Arrays,我在Javascript中遇到了这个问题:我想从一个对象数组中获取经度和纬度值。这一切都很好,但当我试图将其保存到全局数组中时,它会覆盖以前的所有值。结果是一个数组,它是最后一个推送对象的8倍 全局数组:var\u坐标=[] function getCoordinates() { mark = {}; for(var key in _data) { if(_data.hasOwnProperty(key)){ mark["lng"] = _

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

全局数组:
var\u坐标=[]

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)
}

这是我第一次在这里问问题。因此,如果我忘记了什么,请说。

您可以尝试在
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);
}

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

修理,移动

mark = {};
进入
for
循环。

您正在每个循环中变异(全局)变量
标记。改为这样做

_coordinates.push({lng: _data[key].long, lat: data[key].lat});

在这里,您希望全局变量和局部变量是什么?目前,
mark
是全局的,
\u坐标
被假定为+global,
\u数据
被假定为+global。所以问题是您正在处理同一个
mark
@OttoAllmendinger实例,您确定吗?你测试过了吗?因为这似乎工作得很好:如果你是对的,为什么这个演示会工作?@OttoAllmendinger
var
声明确实被挂起了,但是因为
mark
仍然在每个循环中被重新分配给一个新对象,这仍然有效。哇,你说得对。经常被它咬,现在我太偏执了;-)