Seleccionar el último elemento en la matriz de JavaScript [duplicado]

Resuelto mkyong asked hace 12 años • 13 respuestas

Estoy creando una aplicación que actualiza la ubicación y la ruta de un usuario en tiempo real y la muestra en un mapa de Google. Tengo una funcionalidad que permite rastrear a varios usuarios al mismo tiempo utilizando un objeto, que se actualiza cada segundo.

En este momento, cuando un usuario presiona un botón en la aplicación de Android, las coordenadas se envían a una base de datos y cada vez que cambia la ubicación, se actualiza un marcador en el mapa (y se forma una polilínea).

Como tengo varios usuarios, envío una cadena alfanumérica única y generada aleatoriamente para poder mostrar una ruta individual para cada usuario. Cuando JS extrae estos datos de la base de datos, verifica si el usuario existe; si no es así, crea una nueva clave con el valor de una lista. Se vería algo como esto:

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

Lo que estoy haciendo es almacenar una lista de coordenadas como valor de la clave, que es la identificación del usuario. Mi programa sigue actualizando esta lista cada vez que se cambia la ubicación al agregarla a la lista (esto funciona correctamente).

Lo que debo hacer es actualizar la ubicación del marcador cada vez que cambia la ubicación. Me gustaría hacer esto seleccionando el último elemento de la matriz, ya que esa sería la última ubicación conocida. Ahora mismo, cada vez que se cambia la ubicación se añade un nuevo marcador al mapa (cada uno de los puntos del ejemplo mostraría un marcador en esa ubicación) por lo que se siguen añadiendo marcadores.

Usaría una declaración ´for (x in loc)` cada vez que se actualiza la ubicación para tomar la última ubicación de la lista y usarla para actualizar el marcador. ¿Cómo selecciono este último elemento del array dentro del hash?

mkyong avatar Jan 29 '12 09:01 mkyong
Aceptado

Cómo acceder al último elemento de una matriz

Se ve así:

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

Que en tu caso se ve así:

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

o, en versión más larga, sin crear nuevas variables:

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

Cómo agregar un método para hacerlo más simple

Si eres fanático de la creación de funciones/atajos para realizar dichas tareas, el siguiente código:

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

le permitirá obtener el último elemento de una matriz invocando last()el método de la matriz, en su caso, por ejemplo:

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

Puedes comprobar que funciona aquí: http://jsfiddle.net/D4NRN/

Tadeck avatar Jan 29 '2012 02:01 Tadeck

Utilice el slice()método:

my_array.slice(-1)[0]
Datageek avatar Jan 06 '2014 19:01 Datageek