Ma teen rakenduse, mis uuendab kasutaja asukohta ja teed reaalajas ning kuvab seda Google'i kaardil. Mul on funktsionaalsus, mis võimaldab jälgida mitut kasutajat korraga, kasutades objekti, mida uuendatakse iga sekundi tagant.
Praegu, kui kasutaja vajutas Android-rakenduses nuppu, saadetakse koordinaadid andmebaasi ja iga kord, kui asukoht muutub, uuendatakse kaardil marker (ja moodustatakse polügoon).
Kuna mul on mitu kasutajat, saadan unikaalse ja juhuslikult genereeritud tähtnumbrilise stringi, et saaksin kuvada iga kasutaja jaoks individuaalse tee. Kui JS tõmbab need andmed andmebaasist, kontrollib ta, kas kasutaja on olemas, kui ei ole, loob ta uue võtme, mille väärtus on nimekiri. See näeks välja umbes nii:
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)]}
See, mida ma teen, on koordinaatide nimekirja salvestamine võtme väärtuseks, mis on kasutaja'i ID. Minu programm uuendab seda nimekirja pidevalt iga kord, kui asukoht muutub, lisades nimekirja (see töötab korralikult).
Mida mul on vaja teha, on marker'i asukoha uuendamine iga kord, kui asukoht muutub. Tahaksin seda teha, valides massiivi viimase elemendi, kuna see oleks viimane teadaolev asukoht. Praegu lisatakse kaardile iga kord, kui asukohta muudetakse, uus marker (iga näites esitatud punkt näitab markerit selles asukohas), nii et markereid lisatakse jätkuvalt.
Ma kasutaksin ´for (x in loc)` avaldust iga kord, kui asukoht uuendatakse, et võtta nimekirjast viimane asukoht ja kasutada seda markeri uuendamiseks. Kuidas ma valin selle viimase elemendi massiivist hashi sees?
See näeb välja nii:
var my_array = /* some array here */;
var last_element = my_array[my_array.length - 1];
Mis sinu puhul näeb välja nii:
var array1 = loc['f096012e-2497-485d-8adb-7ec0b9352c52'];
var last_element = array1[array1.length - 1];
või pikemas versioonis ilma uute muutujate loomiseta:
loc['f096012e-2497-485d-8adb-7ec0b9352c52'][loc['f096012e-2497-485d-8adb-7ec0b9352c52'].length - 1];
Kui olete selliste ülesannete täitmiseks mõeldud funktsioonide/ühenduste loomise fänn, siis järgmine kood:
if (!Array.prototype.last){
Array.prototype.last = function(){
return this[this.length - 1];
};
};
võimaldab teil saada massiivi viimase elemendi, kutsudes array's last()
meetodit, teie puhul näiteks..:
loc['f096012e-2497-485d-8adb-7ec0b9352c52'].last();
Saate kontrollida, et see töötab siin:
.Kasutage JavaScripti objekte, kui see on teie rakenduse jaoks kriitiline. Te ei tohiks kasutada oma rakenduse kriitiliste osade haldamiseks tooreid primitiive. Kuna see näib olevat teie rakenduse tuum, peaksite selle asemel kasutama objekte. Ma'olen kirjutanud mõned koodid allpool, et aidata teil alustada. Meetod lastLocation
tagastaks viimase asukoha.
function User(id) {
this.id = id;
this.locations = [];
this.getId = function() {
return this.id;
};
this.addLocation = function(latitude, longitude) {
this.locations[this.locations.length] = new google.maps.LatLng(latitude, longitude);
};
this.lastLocation = function() {
return this.locations[this.locations.length - 1];
};
this.removeLastLocation = function() {
return this.locations.pop();
};
}
function Users() {
this.users = {};
this.generateId = function() {
return Math.random();
};
this.createUser = function() {
var id = this.generateId();
this.users[id] = new User(id);
return this.users[id];
};
this.getUser = function(id) {
return this.users[id];
};
this.removeUser = function(id) {
var user = this.getUser(id);
delete this.users[id];
return user;
};
}
var users = new Users();
var user = users.createUser();
user.addLocation(0, 0);
user.addLocation(0, 1);