ユーザーの位置と経路をリアルタイムで更新し、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)」ステートメントを使用してリストから最後の位置を取得し、それを使用してマーカーを更新します。ハッシュ内の配列からこの最後の要素を選択するにはどうすればよいですか?
ベストアンサー1
配列の最後の要素にアクセスする方法
次のようになります:
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()
あなたの場合は次のようになります。
loc['f096012e-2497-485d-8adb-7ec0b9352c52'].last();
ここで動作を確認できます:http://jsfiddle.net/D4NRN/