784 votes

Sélection du dernier élément dans le tableau JavaScript

Je suis en train de faire une application qui met à jour l'emplacement de l'utilisateur et le chemin d'accès, en temps réel, et les affiche sur une Carte Google. J'ai fonctionnalité qui permet à plusieurs utilisateurs d'être suivi en même temps à l'aide d'un objet, qui est mis à jour chaque seconde.

Maintenant, lorsqu'un utilisateur appuie sur un bouton dans l'application Android, les coordonnées sont envoyées à une base de données et chaque fois que les modifications de l'emplacement, un marqueur est mis à jour sur la carte (et une polyligne est formé).

Depuis que j'ai plusieurs utilisateurs, j'ai envoyer un unique et généré de façon aléatoire chaîne alphanumérique afin que je puisse afficher un chemin individuel pour chaque utilisateur. Lors de la JS tire de ces données de la base de données, il vérifie si l'utilisateur existe, si elle n'est pas, il crée une nouvelle clé de la valeur d'une liste. Il ressemblerait à quelque chose comme ceci:

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

Ce que je suis en train de faire est de stocker une liste de coordonnées que la valeur de la clé, qui est l'ID de l'utilisateur. Mon programme garde la mise à jour de cette liste à chaque fois que l'emplacement est modifié par l'ajout, à la liste (cela fonctionne correctement).

Ce que je dois faire est de mettre à jour le marqueur d'emplacement à chaque fois que les modifications de l'emplacement. Je voudrais le faire en sélectionnant le dernier élément du tableau depuis que serait le dernier emplacement connu. Maintenant, chaque fois que l'emplacement est modifié, un nouveau marqueur est ajouté à la carte (chacun des points dans l'exemple devrait montrer un marqueur à cet endroit) donc marqueurs continuent d'être ajoutés.

Je voudrais utiliser une pour (x ldc) déclaration à chaque fois que l'emplacement des mises à jour pour attraper le dernier emplacement de la liste et l'utiliser pour mettre à jour le marqueur. Comment puis-je sélectionner le dernier élément du tableau à l'intérieur de la table de hachage?

Merci à l'avance!

1107voto

Tadeck Points 37046

Comment accéder au dernier élément d'un tableau

Il ressemble à ça:

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

Qui dans votre cas ressemble à ceci:

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

ou, en version longue, sans créer de nouvelles variables:

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

Comment ajouter une méthode pour faire plus simple

Si vous êtes un fan pour la création de fonctions/raccourcis pour s'acquitter de ces tâches, le code suivant:

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

va vous permettre d'obtenir le dernier élément d'un tableau, par l'évocation du tableau last() méthode, dans votre cas, par exemple.:

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

Vous pouvez vérifier que ça fonctionne ici: http://jsfiddle.net/D4NRN/

712voto

Datageek Points 2846

Utilisez la méthode slice ():

 my_array.slice(-1)[0]
 

189voto

Josh Points 2733

Vous pouvez également .pop du dernier élément. Attention, cela changera la valeur du tableau , mais cela pourrait être OK pour vous.

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

38voto

amay0048 Points 134
var last = array.slice(-1)[0];

Je trouve tranche à -1 utile pour obtenir le dernier élément d'un tableau de longueur inconnue) et la performance est bien meilleure que le calcul de la longueur de moins de 1.

Mozilla Docs sur la Tranche

Les performances des différentes méthodes de sélection du dernier élément du tableau

13voto

Levi Morrison Points 8141

Utilisez des objets JavaScript si cela est essentiel pour votre application. Vous ne devez pas utiliser de primitives brutes pour gérer les parties critiques de votre application. Comme cela semble être le cœur de votre application, vous devriez plutôt utiliser des objets. J'ai écrit un code ci-dessous pour vous aider à démarrer. La méthode lastLocation retournerait le dernier emplacement.


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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X