我在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)
}
这是我第一次在这里提问。所以如果我忘记了什么,请说出来。
答案 0 :(得分:5)
您可以尝试在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);
}
答案 1 :(得分:2)
问题是您反复修改同一个对象。您的数组最终包含对该一个对象的八个引用。
要修复,请移动
mark = {};
进入for
循环。
答案 2 :(得分:1)
您正在改变每个循环中的(全局)变量mark
。这样做
_coordinates.push({lng: _data[key].long, lat: data[key].lat});