1824 votes

Récupérer le dernier élément d'un tableau

Voici mon code JavaScript jusqu'à présent :

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

Actuellement, il prend l'avant-dernier élément du tableau de l'URL. Cependant, je veux vérifier que le dernier élément du tableau est bien le suivant "index.html" et si oui, prenez le troisième et dernier élément à la place.

2078voto

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

Dans le cas où votre serveur sert le même fichier pour "index.html" et "inDEX.htML", vous pouvez également utiliser : .toLowerCase() .

Cependant, vous pourriez envisager de faire cela côté serveur si possible : ce sera plus propre et fonctionnera pour les personnes sans JS.


EDIT - ES-2022

Utilisation de l'ES-2022 Array.at() on peut écrire ce qui précède comme suit :

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

62 votes

Si vous avez juste besoin du dernier élément, vous pouvez utiliser Array.pop().

78 votes

@BadriDerakhshan Cela supprimerait inévitablement le dernier élément du tableau avant de le renvoyer. Ce n'est donc pas une option si vous voulez simplement inspecter le dernier élément du tableau. Vous devriez également le repousser pour restaurer le tableau dans son état antérieur.

1 votes

Vous devez vérifier si le tableau est vide. Un tableau vide est un tableau légal.

1520voto

kritzikratzi Points 2663

Je ne sais pas s'il y a un inconvénient, mais cela semble assez concis :

arr.slice(-1)[0] 

o

arr.slice(-1).pop()

Les deux reviendront undefined si le tableau est vide.

176 votes

L'utilisation de la déstructuration est également intéressante : const [lastItem] = arr.slice(-1)

26 votes

.pop() supprime le dernier élément, ce qui modifie le tableau d'origine. Ce n'est pas la même chose que de simplement récupérer cette valeur.

89 votes

@Badrush slice() crée un nouveau tableau avec une copie d'un seul élément, et pop modifie uniquement cette copie. Le tableau original reste indemne.

393voto

mohawke Points 481

Utilice Array.pop :

var lastItem = anArray.pop();

Important : Cela renvoie le dernier élément et supprime dans le tableau

9 votes

Particulièrement bien pour quelque chose comme : filename.split('.').pop()

14 votes

Il ne retourne pas seulement le dernier élément mais le supprime !

2 votes

const lastItem = [...anArray].pop() serait un moyen d'éviter la mutation

210voto

Aram Kocharyan Points 8530

Une version plus courte de ce que @chaiguy a posté :

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

La lecture de l'index -1 renvoie undefined déjà.

EDIT :

De nos jours, la préférence semble aller à l'utilisation de modules et à l'évitement de toucher au prototype ou d'utiliser un espace de nom global.

export function last(array) {
    return array[array.length - 1];
}

10 votes

Si l'utilisation concrète de ce système n'est pas évidente, voici un exemple : var lastItem = [3,2,1,5].last(); . La valeur de lastItem es 5 .

16 votes

Cette réponse est correcte et aussi assez propre MAIS( !!!) Une règle de base en utilisant Javascript est que Do NOT modify objects you Do NOT own . C'est dangereux pour de nombreuses raisons, notamment 1. les autres développeurs travaillant dans votre équipe pourraient être désorientés car cette méthode n'est pas standard 2. avec toute mise à jour des bibliothèques ou même l'utilisation d'une version ECMAScript inférieure ou supérieure, il pourrait facilement se perdre !

2 votes

Pour ceux qui se posent la question, cela casse Array.forEach(). Je suis toujours d'accord pour dire que la modification des prototypes n'est pas la pire chose qui soit, mais celle-ci est mauvaise.

44voto

Pablo Mescher Points 1849

Je préfère utiliser array.pop() que les index.

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

de cette façon, vous obtenez toujours l'élément précédant index.html (à condition que votre tableau ait isolé index.html comme un seul élément). Note : Vous perdrez les derniers éléments du tableau, cependant.

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