Ottenere l'ultimo elemento di un array di stringhe divise


183

Devo ottenere l'ultimo elemento di un array diviso con più separatori. I separatori sono virgole e spazio. Se non ci sono separatori, dovrebbe restituire la stringa originale.

Se la stringa è "come va, oggi?" dovrebbe tornare "oggi?"

Se l'input fosse "ciao", l'output dovrebbe essere "ciao".

Come posso farlo in JavaScript?

Risposte:


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

A questo punto, piecesè un array e pieces.lengthcontiene le dimensioni dell'array in modo da ottenere l'ultimo elemento dell'array, si controlla pieces[pieces.length-1]. Se non ci sono virgole o spazi, verrà semplicemente emessa la stringa come è stata data.

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

55
È inoltre possibile utilizzare pieces.pop()per ottenere l'ultimo elemento dell'array.
Trento,

4
c'è un modo per usarlo per fare riferimento a str.split () senza dover memorizzare la variabile?
Tanner

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

788

C'è una linea per tutto. :)

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

6
Il problema qui è che pop () rimuove anche quell'elemento dall'array, cambiandolo in tal modo.
slashwhatever

50
@Jangla: Questo non è un problema, poiché l'array viene creato dalla splitchiamata, non viene comunque mantenuto. La stringa originale non viene modificata estraendo l'elemento dall'array.
Guffa,

1
geniale, tutto in una volta, non c'è bisogno dell'intermediario var per configurare l'array ... bello
virtualeyes

@Guffa Sai come posso ottenere gli ultimi due elementi della divisione?
Vitor Guerreiro,

2
@MarioLevrero: Questo è un quantificatore che significa lo stesso del quantificatore {1,}, ovvero [, ]+corrisponde a uno o più caratteri nel set (virgola e spazio). È utile quando si desidera tutte le parole dalla stringa, ma quando si desidera solo l'ultima parola non fa alcuna differenza funzionale, riduce solo il sovraccarico in quanto vi saranno meno stringhe nell'array.
Guffa,

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

10
Non penso che pop () prenda argomenti.
Grace Shao,


5
Ma, in generale, .split(',').pop()funziona per l'ultimo elemento su una stringa separata da virgola. Dico solo perché sono stato ingannato dalla fantastica risposta di Guffa, l'ho semplicemente ignorato perché non avevo bisogno di una regex e ho pensato che il trucco fosse lì! : P
cregox,

25

Puoi anche considerare di invertire l'array e prendere il primo elemento. In questo modo non è necessario conoscere la lunghezza, ma non offre vantaggi reali e lo svantaggio che l'operazione inversa potrebbe richiedere più tempo con array di grandi dimensioni:

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

È facile però, ma modifica anche l'array originale in questione. Questo potrebbe o non potrebbe essere un problema.

Riferimento: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse

Probabilmente potresti voler usare questo però:

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

1
Il .pop()metodo è la migliore risposta che abbia mai visto finora. Ecco perché è stato creato!
Nicholas Porter,

Sconsiglio vivamente di invertire () perché l'inversione sarà costosa su array di grandi dimensioni. Se non ti interessa la mutazione, usa semplicemente pop (), altrimenti slice (-1) [0].
Wortwart,

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

Il migliore in assoluto e il mio preferito.


Ah certo. Questa è un'ottima risposta perché non
muta

3

E se non vuoi costruire un array ...

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

La ripartizione in inglese è:

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

Il sostituto dice solo di sostituire l'intera stringa con il materiale dopo l'ultimo separatore.

Quindi puoi vedere come questo può essere applicato in generale. Si noti che la stringa originale non viene modificata.


0
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

È possibile accedere direttamente all'indice dell'array:

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


3
Ciao a tutti, benvenuti in SO! Penso che questa risposta non tenga conto del separatore di spazi come richiesto nella domanda.
John-Philip,

1
Questa risposta non supporta la lunghezza arbitraria dell'array di stringhe
Nima Soroush,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.