Javascript将对象推送到全局数组覆盖以前的值?
我在Javascript中遇到了这个问题:我想从一个对象数组中获取经度和纬度值。这一切都很好,但当我试图将其保存到全局数组中时,它会覆盖以前的所有值。结果是一个数组,它是最后一个推送对象的8倍 全局数组:Javascript将对象推送到全局数组覆盖以前的值?,javascript,arrays,Javascript,Arrays,我在Javascript中遇到了这个问题:我想从一个对象数组中获取经度和纬度值。这一切都很好,但当我试图将其保存到全局数组中时,它会覆盖以前的所有值。结果是一个数组,它是最后一个推送对象的8倍 全局数组:var\u坐标=[] function getCoordinates() { mark = {}; for(var key in _data) { if(_data.hasOwnProperty(key)){ mark["lng"] = _
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实例,您确定吗?你测试过了吗?因为这似乎工作得很好:如果你是对的,为什么这个演示会工作?@OttoAllmendingervar
声明确实被挂起了,但是因为mark
仍然在每个循环中被重新分配给一个新对象,这仍然有效。哇,你说得对。经常被它咬,现在我太偏执了;-)