Uzyskiwanie ostatniego elementu podzielonej tablicy ciągów

183

Muszę uzyskać ostatni element podzielonej tablicy z wieloma separatorami. Separatory to przecinki i spacja. Jeśli nie ma separatorów, powinien zwrócić oryginalny ciąg.

Jeśli ciąg brzmi „jak się masz, dzisiaj?” powinien zwrócić „dzisiaj?”

Jeśli dane wejściowe to „hello”, dane wyjściowe powinny być „hello”.

Jak mogę to zrobić w JavaScript?

JJJ
źródło

Odpowiedzi:

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

W tym momencie piecesjest tablica i pieces.lengthzawiera rozmiar tablicy, więc aby uzyskać ostatni element tablicy, zaznaczasz pieces[pieces.length-1]. Jeśli nie ma przecinków ani spacji, po prostu wyświetli napis w takiej postaci, w jakiej został podany.

alert(pieces[pieces.length-1]); // alerts "today?"
Paolo Bergantino
źródło
55
Możesz także użyć, pieces.pop()aby uzyskać ostatni element tablicy.
Trent,
4
czy istnieje sposób, aby użyć tego do odwołania do str.split () bez konieczności przechowywania zmiennej?
Tanner
1
var last = str.split(/[\s,]+/).pop()
zanderwar
788

Na wszystko jest jedna linijka. :)

var output = input.split(/[, ]+/).pop();
Guffa
źródło
6
Problem polega na tym, że pop () usuwa również ten element z tablicy, zmieniając go.
slashwhither
50
@Jangla: To nie jest problem, ponieważ tablica jest tworzona przez splitwywołanie, i tak nie jest zachowywana. Oryginalny ciąg nie jest zmieniany przez usunięcie elementu z tablicy.
Guffa
1
genialny, wszystko za jednym razem, nie trzeba pośredniego var do ustawienia tablicy ... ładne
virtualeyes
@Guffa Czy wiesz, jak mogę uzyskać dwa ostatnie elementy podziału?
Vitor Guerreiro
2
@MarioLevrero: To kwantyfikator, który oznacza to samo co kwantyfikator {1,}, tzn. [, ]+Dopasowuje jeden lub więcej znaków w zestawie (przecinek i spacja). Jest to przydatne, gdy chcesz wszystkie słowa z ciągu, ale gdy chcesz tylko ostatnie słowo, nie robi to żadnej funkcjonalnej różnicy, zmniejsza jedynie obciążenie, ponieważ w tablicy będzie mniej ciągów.
Guffa,
56
var item = "one,two,three";
var lastItem = item.split(",").pop();
console.log(lastItem); // three
mohawke
źródło
10
Nie sądzę, aby pop () pobierał argumenty.
Grace Shao,
5
Ale ogólnie rzecz biorąc .split(',').pop()działa dla ostatniego elementu na łańcuch oddzielony przecinkami. Tylko mówię, bo wprowadziła mnie w błąd niesamowita odpowiedź Guffy, po prostu zignorowałem ją, ponieważ nie potrzebowałem wyrażenia regularnego i myślałem, że sztuczka już tam jest! : P
cregox
25

Możesz także rozważyć odwrócenie tablicy i zabranie pierwszego elementu. W ten sposób nie musisz wiedzieć o długości, ale nie przynosi to żadnych realnych korzyści i wadę, że operacja odwrotna może potrwać dłużej przy dużych tablicach:

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

Jest to łatwe, ale modyfikuje również oryginalną tablicę. To może, ale nie musi stanowić problemu.

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

Prawdopodobnie możesz chcieć tego użyć:

array1.split(",").pop()
Smile4ever
źródło
1
Ta .pop()metoda jest najlepszą odpowiedzią, jaką do tej pory widziałem. Właśnie dlatego został stworzony!
Nicholas Porter
Zdecydowanie odradzam reverse (), ponieważ odwracanie będzie kosztowne w przypadku dużych tablic. Jeśli nie obchodzi Cię mutacja, po prostu użyj pop (), w przeciwnym razie slice (-1) [0].
wortwart
13
array.split(' ').slice(-1)[0]

Najlepszy w historii i mój ulubiony.

jithil
źródło
Ach, oczywiście. To świetna odpowiedź, ponieważ nie
mutuje
3

A jeśli nie chcesz konstruować tablicy ...

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

Podział w języku angielskim to:

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

Zamień tylko mówi, że zamień cały ciąg znaków na rzeczy po ostatnim separatorze.

Możesz więc zobaczyć, jak można to ogólnie zastosować. Uwaga: oryginalny ciąg nie jest modyfikowany.

Tony
źródło
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 >>";
użytkownik7425063
źródło
0

Możesz uzyskać dostęp do indeksu tablicy bezpośrednio:

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

tnong
źródło
3
Witaj tnong, witaj w SO! Myślę, że ta odpowiedź nie uwzględnia separatora spacji, zgodnie z żądaniem w pytaniu.
John-Philip
1
Ta odpowiedź nie obsługuje dowolnej długości tablicy łańcuchów
Nima Soroush