Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:被推入数组的对象是否相互覆盖?_Javascript_Arrays_Google Maps_Object_Push - Fatal编程技术网

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