778 Stimmen

Auswählen des letzten Elements in einem JavaScript-Array

Ich mache eine Anwendung, die den Standort und den Weg eines Benutzers in Echtzeit aktualisiert und auf einer Google-Karte anzeigt. Ich habe eine Funktionalität, die es ermöglicht, mehrere Benutzer gleichzeitig zu verfolgen, indem ich ein Objekt verwende, das jede Sekunde aktualisiert wird.

Wenn ein Benutzer eine Taste in der Android-App drückt, werden die Koordinaten an eine Datenbank gesendet, und jedes Mal, wenn sich der Standort ändert, wird eine Markierung auf der Karte aktualisiert (und eine Polylinie gebildet).

Da ich mehrere Benutzer habe, sende ich eine eindeutige und zufällig generierte alphanumerische Zeichenfolge, damit ich für jeden Benutzer einen individuellen Pfad anzeigen kann. Wenn das JS diese Daten aus der Datenbank abruft, prüft es, ob der Benutzer existiert, und wenn nicht, erstellt es einen neuen Schlüssel, dessen Wert eine Liste ist. Es würde etwa so aussehen:

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

Was ich tue, ist das Speichern einer Liste von Koordinaten als Wert des Schlüssels, der die ID des Benutzers ist. Mein Programm aktualisiert diese Liste jedes Mal, wenn der Standort geändert wird, indem es der Liste hinzugefügt wird (dies funktioniert ordnungsgemäß).

Ich muss den Standort der Markierung jedes Mal aktualisieren, wenn sich der Standort ändert. Ich möchte dies tun, indem ich das letzte Element im Array auswähle, da dies der letzte bekannte Standort wäre. Im Moment wird jedes Mal, wenn der Standort geändert wird, eine neue Markierung zur Karte hinzugefügt (jeder der Punkte im Beispiel würde eine Markierung an diesem Standort anzeigen), sodass weiterhin Markierungen hinzugefügt werden.

Ich würde eine "for (x in loc)`-Anweisung jedes Mal, wenn der Ort aktualisiert, um den letzten Ort aus der Liste zu greifen und verwenden, um die Markierung zu aktualisieren. Wie wähle ich dieses letzte Element aus dem Array innerhalb des Hashes aus?

15voto

Mykhailo Zhuk Punkte 769

Wenn Sie ES6 verwenden, können Sie das tun:

const arr = [ 1, 2, 3 ];
[ ...arr ].pop(); // 3
arr; // [ 1, 2, 3 ] (wasn't changed)

13voto

Levi Morrison Punkte 18580

Verwenden Sie JavaScript-Objekte, wenn dies für Ihre Anwendung wichtig ist. Sie sollten keine rohen Primitive verwenden, um kritische Teile Ihrer Anwendung zu verwalten. Da dies der Kern Ihrer Anwendung zu sein scheint, sollten Sie stattdessen Objekte verwenden. Ich habe unten etwas Code geschrieben, um Ihnen den Einstieg zu erleichtern. Die Methode lastLocation würde den letzten Ort zurückgeben.


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

5voto

zellio Punkte 28111
var last = function( obj, key ) { 
    var a = obj[key];
    return a[a.length - 1];
};

last(loc, 'f096012e-2497-485d-8adb-7ec0b9352c52');

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X