252 votes

Récupérer le dernier élément d'un tableau de chaînes divisées

J'ai besoin d'obtenir le dernier élément d'un tableau divisé avec plusieurs séparateurs. Les séparateurs sont des virgules et des espaces. S'il n'y a pas de séparateurs, la chaîne originale doit être retournée.

Si la chaîne de caractères est "comment allez-vous aujourd'hui ?", elle devrait renvoyer "aujourd'hui ?".

Si l'entrée était "hello", la sortie devrait être "hello".

Comment puis-je faire cela en JavaScript ?

978voto

Guffa Points 308133

Il y a une phrase pour tout :)

var output = input.split(/[, ]+/).pop();

8 votes

Le problème ici est que pop() est aussi supprime cet élément du tableau, le modifiant ainsi.

75 votes

@Jangla : Ce n'est pas un problème, car le tableau est créé par la fonction split appel, il n'est pas gardé de toute façon. La chaîne originale n'est pas modifiée par l'extraction de l'élément du tableau.

1 votes

Génial, tout en une fois, pas besoin de var intermédiaire pour configurer le tableau...sympa

152voto

Paolo Bergantino Points 199336
const str = "hello,how,are,you,today?"
const pieces = str.split(/[\s,]+/)
const last = pieces[pieces.length - 1]

console.log({last})

A ce stade, pieces est un tableau et pieces.length contient la taille du tableau, donc pour obtenir le dernier élément du tableau, vous vérifiez pieces[pieces.length-1] . S'il n'y a pas de virgule ou d'espace, la chaîne de caractères sera simplement affichée telle qu'elle a été donnée.

alert(pieces[pieces.length-1]); // alerts "today?"

91 votes

Vous pouvez également utiliser pieces.pop() pour obtenir le dernier élément de votre tableau.

5 votes

Existe-t-il un moyen de l'utiliser pour faire référence à str.split() sans avoir à stocker la variable ?

5 votes

var last = str.split(/[\s,]+/).pop()

99voto

mohawke Points 31
var item = "one,two,three";
var lastItem = item.split(",").pop();
console.log(lastItem); // three

10 votes

Je ne pense pas que pop() prenne des arguments.

0 votes

6 votes

Mais, d'une manière générale .split(',').pop() fonctionne pour le dernier élément d'une chaîne séparée par des virgules. Je dis juste ça parce que j'ai été induit en erreur par la réponse géniale de Guffa, je ne l'ai pas prise en compte parce que je n'avais pas besoin d'une regex et je pensais que l'astuce était là ! :P

36voto

jithil Points 159

Le meilleur de tous les temps et mon préféré en utilisant split y slice

const str = "hello, how are you today?"
const last = str.split(' ').slice(-1)[0]
console.log({last})

Et un autre utilise split puis pop le dernier.

const str = "hello, how are you today?"
const last = str.split(' ').pop()
console.log({last})

2 votes

Ah bien sûr. C'est une excellente réponse car elle ne modifie pas l'original +1.

2 votes

En utilisant .pop() est toujours pratique après la tranche pas de mutation puisque la méthode accesseur renvoie un nouveau tableau.

32voto

Smile4ever Points 14

Vous pouvez également envisager d'inverser votre tableau et de prendre le premier élément. De cette façon, vous n'avez pas besoin de connaître la longueur, mais cela n'apporte aucun avantage réel et l'inconvénient est que l'opération inverse peut prendre plus de temps avec les grands tableaux :

array1.split(",").reverse()[0]

C'est pourtant facile, mais cela modifie aussi le tableau original en question. Cela peut ou non être un problème.

Référence : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse

Vous voudrez probablement utiliser ceci cependant :

array1.split(",").pop()

3 votes

Le site .pop() est la meilleure réponse que j'ai vue jusqu'à présent. C'est pour cela qu'elle a été créée !

1 votes

Je déconseille fortement reverse() car l'inversion sera coûteuse sur les grands tableaux. Si vous ne vous souciez pas de la mutation, utilisez simplement pop(), sinon slice(-1)[0].

0 votes

Cela augmente la complexité du temps puisque vous avez une boucle supplémentaire pour inverser le tableau.

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