Obtener el último elemento de una matriz de cadenas divididas


183

Necesito obtener el último elemento de una matriz dividida con múltiples separadores. Los separadores son comas y espacios. Si no hay separadores, debería devolver la cadena original.

Si la cadena es "¿cómo estás hoy?" debería volver "hoy?"

Si la entrada fuera "hola", la salida debería ser "hola".

¿Cómo puedo hacer esto en JavaScript?

Respuestas:


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

En este punto, pieceses una matriz y pieces.lengthcontiene el tamaño de la matriz, así que para obtener el último elemento de la matriz, verifica pieces[pieces.length-1]. Si no hay comas o espacios, simplemente generará la cadena como se le dio.

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

55
También puede usar pieces.pop()para obtener el último elemento de su matriz.
Trent

44
¿Hay alguna manera de usar esto para referirse de nuevo a str.split () sin tener que almacenar la variable?
Tanner

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

788

Hay una línea para todo. :)

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

66
El problema aquí es que pop () también elimina ese elemento de la matriz, lo que lo cambia.
slashwhatever

50
@Jangla: Eso no es un problema, ya que la matriz es creada por la splitllamada, de todos modos no se mantiene. La cadena original no se cambia haciendo estallar el elemento de la matriz.
Guffa

1
genial, todo de una vez, sin necesidad de var intermediario para configurar la matriz ... agradable
virtualeyes

@Guffa ¿Sabes cómo puedo obtener los últimos dos elementos de división?
Vitor Guerreiro

2
@ MarioLevrero: Es un cuantificador que significa lo mismo que el cuantificador {1,}, es decir, [, ]+coincide con uno o más de los caracteres del conjunto (coma y espacio). Es útil cuando quiere todas las palabras de la cadena, pero cuando solo quiere la última palabra, no hace ninguna diferencia funcional, solo reduce la sobrecarga, ya que habrá menos cadenas en la matriz.
Guffa

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

10
No creo que pop () tome argumentos.
Grace Shao


55
Pero, genéricamente hablando, .split(',').pop()funciona para el último elemento en una cadena separada por comas. Solo digo que me engañó la asombrosa respuesta de Guffa, ¡simplemente la ignoré porque no necesitaba una expresión regular y pensé que el truco estaba allí! : P
cregox

25

También puede considerar invertir su matriz y tomar el primer elemento. De esa manera, no tiene que saber acerca de la longitud, pero no aporta beneficios reales y la desventaja de que la operación inversa puede llevar más tiempo con matrices grandes:

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

Sin embargo, es fácil, pero también modifica la matriz original en cuestión. Eso podría o no ser un problema.

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

Sin embargo, probablemente quieras usar esto:

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

1
El .pop()método es la mejor respuesta que he visto hasta ahora. ¡Por eso fue creado!
Nicholas Porter

Recomiendo encarecidamente no reverse () porque la inversión será costosa en matrices grandes. Si no le importa la mutación, simplemente use pop (), de lo contrario, corte (-1) [0].
wortwart

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

El mejor de todos y mi favorito.


Ah por supuesto. Esta es una gran respuesta porque no muta el +1 original
jhamPac

3

Y si no quieres construir una matriz ...

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

El desglose en inglés es:

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

El reemplazo solo dice reemplazar toda la cadena con las cosas después del último separador.

Entonces puede ver cómo esto se puede aplicar en general. Tenga en cuenta que la cadena original no se modifica.


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

Puede acceder al índice de matriz directamente:

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


3
Hola tnong, bienvenido a SO! Creo que esta respuesta no tiene en cuenta el separador de espacio como se solicitó en la pregunta.
John-Philip

1
Esta respuesta no es compatible con la longitud de la matriz de cadenas arbitraria
Nima Soroush
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.