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?

1104voto

Tadeck Punkte 124697

Wie man auf das letzte Element eines Arrays zugreift

So sieht es aus:

var my_array = /* some array here */;
var last_element = my_array[my_array.length - 1];

In Ihrem Fall sieht das so aus:

var array1 = loc['f096012e-2497-485d-8adb-7ec0b9352c52'];
var last_element = array1[array1.length - 1];

oder, in der längeren Version, ohne neue Variablen zu erstellen:

loc['f096012e-2497-485d-8adb-7ec0b9352c52'][loc['f096012e-2497-485d-8adb-7ec0b9352c52'].length - 1];

Hinzufügen einer Methode, um es einfacher zu machen

Wenn Sie ein Fan davon sind, Funktionen/Shortcuts zu erstellen, um solche Aufgaben zu erfüllen, können Sie den folgenden Code verwenden:

if (!Array.prototype.last){
    Array.prototype.last = function(){
        return this[this.length - 1];
    };
};

ermöglicht es Ihnen, das letzte Element eines Arrays zu erhalten, indem Sie die Array-Funktion last() Methode, in Ihrem Fall z. B.:

loc['f096012e-2497-485d-8adb-7ec0b9352c52'].last();

Sie können hier überprüfen, ob es funktioniert: http://jsfiddle.net/D4NRN/

709voto

Datageek Punkte 24367

Verwenden Sie die slice() Methode:

my_array.slice(-1)[0]

186voto

Josh Punkte 7817

Sie können auch .pop aus dem letzten Element. Vorsicht, dadurch wird der Wert des Arrays verändert aber das könnte für Sie in Ordnung sein.

var a = [1,2,3];
a.pop(); // 3
a // [1,2]

84voto

hamecoded Punkte 1035

Verwendung des es6-Dekonstruktionsarrays mit dem Spread-Operator

var last = [...yourArray].pop();

beachten Sie, dass sich IhrArray nicht ändert.

55voto

Nery Jr Punkte 3671
var arr = [1, 2, 3];
arr.slice(-1).pop(); // return 3 and arr = [1, 2, 3]

Wenn das Array leer ist, wird ein undefinierter Wert zurückgegeben, und der Wert des Arrays wird nicht verändert.

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