我正在制作一个实时更新用户位置和路径并将其显示在 Google 地图上的应用程序。我的功能允许使用每秒更新的对象同时跟踪多个用户。
现在,当用户在 Android 应用程序中按下按钮时,坐标会被发送到数据库,并且每次位置发生变化时,都会在地图上更新一个标记(并形成一条折线)。
由于我有多个用户,我发送一个唯一且随机生成的字母数字字符串,以便我可以为每个用户显示单独的路径。当 JS 从数据库中提取这些数据时,它会检查用户是否存在,如果不存在,它会创建一个新键,其值为列表。它看起来像这样:
loc = {f096012e-2497-485d-8adb-7ec0b9352c52: [new google.maps.LatLng(39, -86), new google.maps.LatLng(38, -87), new google.maps.LatLng(37, -88)], 44ed0662-1a9e-4c0e-9920-106258dcc3e7: [new google.maps.LatLng(40, -83), new google.maps.LatLng(41, -82), new google.maps.LatLng(42, -81)]}
我正在做的是将坐标列表存储为键的值,即用户的 ID。每次通过添加到列表中更改位置时,我的程序都会不断更新此列表(这可以正常工作)。
我需要做的是每次位置更改时更新标记的位置。我想通过选择数组中的最后一项来做到这一点,因为那将是最后一个已知位置。现在,每次更改位置时,都会向地图添加一个新标记(示例中的每个点都会在该位置显示一个标记),因此会继续添加标记。
每次位置更新时,我都会使用麓for (x in loc)` 语句从列表中获取最后一个位置并使用它来更新标记。如何从哈希中的数组中选择最后一个元素?
它看起来像这样:
var my_array = /* some array here */; var last_element = my_array[my_array.length - 1];
在您的情况下,它看起来像这样:
var array1 = loc['f096012e-2497-485d-8adb-7ec0b9352c52']; var last_element = array1[array1.length - 1];
或者,在更长的版本中,不创建新变量:
loc['f096012e-2497-485d-8adb-7ec0b9352c52'][loc['f096012e-2497-485d-8adb-7ec0b9352c52'].length - 1];
如果您喜欢创建功能/快捷方式来完成此类任务,请使用以下代码:
if (!Array.prototype.last){ Array.prototype.last = function(){ return this[this.length - 1]; }; };
将允许您通过调用数组的last()方法来获取数组的最后一个元素,例如:
last()
loc['f096012e-2497-485d-8adb-7ec0b9352c52'].last();
你可以在这里检查它是否有效:http: //jsfiddle.net/D4NRN/