web-dev-qa-db-fra.com

Obtenir le dernier élément d'un tableau de chaîne divisée

Je dois 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éparateur, il devrait retourner la chaîne d'origine.

Si la chaîne est "comment allez-vous, aujourd'hui?" il devrait revenir "aujourd'hui?"

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

Comment puis-je faire cela en JavaScript?

134
sol
var str = "hello,how,are,you,today?";
var pieces = str.split(/[\s,]+/);

À ce stade, pieces est un tableau et pieces.length contient la taille du tableau. Pour obtenir le dernier élément du tableau, cochez pieces[pieces.length-1]. S'il n'y a pas de virgules ni d'espaces, il affichera simplement la chaîne telle qu'elle a été donnée.

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

Il y a un one-liner pour tout. :)

var output = input.split(/[, ]+/).pop();
639
Guffa
var item = "one,two";
var lastItem = item.split(",").pop(-1);

Est-ce que ça ne marche pas?

41
mohawke

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

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

C'est facile cependant, mais modifie également le tableau d'origine en question. Cela pourrait 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
Smile4ever

Et si vous ne voulez pas construire un tableau ...

var str = "how,are you doing, today?";
var res = str.replace(/(.*)([, ])([^, ]*$)/,"$3");

La ventilation en anglais est:

/(anything)(any separator once)(anything that isn't a separator 0 or more times)/

Le remplacement indique simplement le remplacement de la chaîne entière par le contenu après le dernier séparateur.

Vous pouvez donc voir comment cela peut être appliqué de manière générale. Notez que la chaîne d'origine n'est pas modifiée.

3
Tony
array.split(' ').slice(-1)[0]

Le meilleur jamais et mon préféré.

2
jithil

Vous pouvez accéder directement à l'index du tableau:

var csv = 'zero,one,two,three'; csv.split(',')[0]; //result: zero csv.split(',')[3]; //result: three

1
tnong
var title = 'fdfdsg dsgdfh dgdh dsgdh tyu hjuk yjuk uyk hjg fhjg hjj tytutdfsf sdgsdg dsfsdgvf dfgfdhdn dfgilkj,n, jhk jsu wheiu sjldsf dfdsf hfdkdjf dfhdfkd hsfd ,dsfk dfjdf ,yier djsgyi kds';
var shortText = $.trim(title).substring(1000, 150).split(" ").slice(0, -1).join(" ") + "...More >>";
0
user7425063