Javascript:被推入数组的对象是否相互覆盖?
我有一个对象的格式如下:Javascript:被推入数组的对象是否相互覆盖?,javascript,arrays,google-maps,object,push,Javascript,Arrays,Google Maps,Object,Push,我有一个对象的格式如下: var telemetry_data = { T36: [ //Date, lat, long [20120516, 25.40294163, -80.46972051], [20120518, 25.40306787, -80.46967025], [20120521, 25.40234592, -80.46980265] ], T43: [ [20120523, -25.4076545, -80.4694513
var telemetry_data = {
T36: [
//Date, lat, long
[20120516, 25.40294163, -80.46972051],
[20120518, 25.40306787, -80.46967025],
[20120521, 25.40234592, -80.46980265]
],
T43: [
[20120523, -25.4076545, -80.46945134],
[20120525, -25.40761155, -80.46756243]
]
};
这显示了不同日期的不同动物(T###)位置。我想在谷歌地图上放置一个标记,显示动物在特定日期的位置,以及一条多段线,显示它到达那里的路径。我的折线部分有问题。请看下面。在路径[tegu_name[j]]之前,一切似乎都正常工作。push(tegu_位置),其中path[tegu\u name[j]]
看起来只被最后一个位置覆盖,而不是被添加到数组中的位置。对于某些动物(T23、T34、T35、T36),尽管存在正确的日期位置,但阵列仍然完全为空。有什么想法吗?我有一种感觉,我犯了一些愚蠢的错误,但我想不出来
Live:(将日期更改为5月18日,在多个位置运行这部分代码,您可以看到控制台打印对象只有一个位置[第776行]。当前位置为紫色点)
完整JS:
//遥测tegus
var tegu_位置;
var path=新对象();
var line=新对象();
//对于每个tegu
对于(var j=0;j 如果(tegu_key[k][0]看起来像是你的路径[tegu_name[j]=…
行(755)应该在k
循环之外,否则数组在k
的每次迭代中都会被重新创建,使用.push()
方法不会覆盖任何内容。这是路径[tegu name[j]=new array();
每次都会覆盖数组
然而,还有一些其他的修正/简化需要进行
marker\u container
是一个数组。不要使用here(changeDate函数的开头)
telemetry\u data
是一个具有属性的对象。您应该在此处使用,而不是创建属性名称数组(tegu\u name
)并对其进行迭代
var-tegu\u位置;
var path=新对象();
var line=新对象();
//对于每个tegu
用于(遥测数据中的var tegu){
路径[tegu]=新数组();
//每个日期
对于(var k=0;k<遥测数据[tegu]。长度;k++){
var keys=遥测数据[tegu][k];
如果(键[0]啊!当我在写代码时,我发现自己在想“for x in y”和“for I//Telemetered tegus
var tegu_location;
var path = new Object();
var line = new Object();
//For each tegu
for (var j = 0; j < tegu_name.length; j++) {
var tegu_key = telemetry_data[tegu_name[j]];
//For each date
for (var k = 0; k < tegu_key.length; k++) {
path[tegu_name[j]] = new Array();
if (tegu_key[k][0] <= date) {
console.log("use point at date "+tegu_key[k][0]);
tegu_location = new google.maps.LatLng(tegu_key[k][1], tegu_key[k][2]);
path[tegu_name[j]].push(tegu_location);
} else {
marker = new google.maps.Marker({
icon: point_tracked,
shape: point_shape,
map: map,
position: tegu_location
});
marker_container.push(marker);
}
console.log(path[tegu_name[j]]);
}
line[tegu_name[j]] = new google.maps.Polyline({
path: path[tegu_name[j]],
strokeColor: '#32cd32',
strokeOpacity: 0.6,
strokeWeight: 3
});
line[tegu_name[j]].setMap(map);
}
var tegu_location;
var path = new Object();
var line = new Object();
//For each tegu
for (var tegu in telemetry_data) {
path[tegu] = new Array();
//For each date
for (var k = 0; k < telemetry_data[tegu].length; k++) {
var keys = telemetry_data[tegu][k];
if (keys[0] <= date) {
console.log("use "+ tegu +" point ("+keys[1]+", "+keys[2]+") at date "+keys[0]);
path[tegu].push(tegu_location = new google.maps.LatLng(keys[1], keys[2]));
} else {
if (tegu_location) {
marker = new google.maps.Marker({
icon: point_tracked,
shape: point_shape,
map: map,
position: tegu_location
});
marker_container.push(marker);
}
}
}
console.log(path[tegu]);
line[tegu] = new google.maps.Polyline({
path: path[tegu],
strokeColor: '#32cd32',
strokeOpacity: 0.6,
strokeWeight: 3
});
line[tegu].setMap(map);
}