Pregunta Obtener el último elemento en una matriz


Aquí está mi código JavaScript hasta ahora:

var linkElement = document.getElementById("BackButton");
var loc_array = document.location.href.split('/');
var newT = document.createTextNode(unescape(capWords(loc_array[loc_array.length-2]))); 
linkElement.appendChild(newT);

Actualmente, lleva el penúltimo elemento de la matriz desde la URL. Sin embargo, quiero hacer una verificación para que el último elemento de la matriz sea "index.html" y, de ser así, tomar el penúltimo elemento.


697
2017-07-09 19:45


origen


Respuestas:


if(loc_array[loc_array.length-1] == 'index.html'){
 //do something
}else{
 //something else.
}

En el caso de que su servidor sirva el mismo archivo para "index.html" y "inDEX.htML", también puede usar: .toLowerCase().

Sin embargo, es posible que desee considerar hacer este lado del servidor si es posible: será más limpio y funcionará para personas sin JS.


763
2017-07-09 19:48



No estoy seguro si hay un inconveniente, pero esto parece bastante conciso:

arr.slice(-1)[0] 

o

arr.slice(-1).pop()

Ambos regresarán undefined si la matriz está vacía.


599
2017-08-23 20:19



Utilizar Array.pop:

var lastItem = anArray.pop();

Importante : Esto devuelve el último elemento y  elimina de la matriz


160
2018-06-14 14:06



Una versión más corta de lo que @chaiguy publicó:

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

Leyendo el índice -1 regresa undefined ya.


112
2017-10-01 15:08



Dos opciones son:

var last = arr[arr.length - 1]

o

var last = arr.slice(-1)[0]

El primero es más rápido, pero el segundo se ve mejor

http://jsperf.com/slice-vs-length-1-arr


80
2018-01-07 21:57



Aquí le mostramos cómo obtenerlo sin ningún efecto sobre el ARRAY original

a = [1,2,5,6,1,874,98,"abc"];
a.length; //returns 8 elements

Si usa pop (), lo hará modifica tu matriz

a.pop();  // will return "abc" AND REMOVES IT from the array 
a.length; // returns 7

Pero puedes usar esto para que tenga sin efecto en la matriz original:

a.slice(-1).pop(); // will return "abc" won't do modify the array 
                   // because slice creates a new array object 
a.length;          // returns 8; no modification and you've got you last element 

55
2017-09-03 21:25



Prefiero usar array.pop() que los índices.

while(loc_array.pop()!= "index.html"){
}
var newT = document.createTextNode(unescape(capWords(loc_array[loc_array.length])));

de esta forma, siempre obtendrá el elemento anterior a index.html (siempre que su matriz tenga index.html aislado como un elemento). Nota: Sin embargo, perderá los últimos elementos de la matriz.


37
2018-02-24 18:39



Obtener el último elemento de una matriz se puede lograr utilizando el rebanada método con valores negativos.

Puedes leer más al respecto aquí en el fondo.

var fileName = loc_array.slice(-1)[0];
if(fileName.toLowerCase() == "index.html")
{
  //your code...
}

Usar pop () cambiará tu matriz, lo cual no siempre es una buena idea.


26
2018-02-12 09:13



La forma ES6 "más limpia" (IMO) sería:

const foo = [1,2,3,4];
const bar = [...foo].pop();

Esto evita que mutemos foo como pop si no hubiéramos usado el operador spread. Dicho eso, me gusta mucho el foo.slice(-1)[0] solución, también.


26
2018-06-16 19:43