Abrufen des letzten Elements eines geteilten String-Arrays


182

Ich muss das letzte Element eines geteilten Arrays mit mehreren Trennzeichen erhalten. Die Trennzeichen sind Kommas und Leerzeichen. Wenn keine Trennzeichen vorhanden sind, sollte die ursprüngliche Zeichenfolge zurückgegeben werden.

Wenn die Zeichenfolge lautet "Wie geht es dir heute?" es sollte "heute" zurückkehren?

Wenn die Eingabe "Hallo" wäre, sollte die Ausgabe "Hallo" sein.

Wie kann ich das in JavaScript machen?

Antworten:


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

Zu diesem Zeitpunkt pieceshandelt es sich um ein Array, pieces.lengthdas die Größe des Arrays enthält. Um das letzte Element des Arrays zu erhalten, überprüfen Sie dies pieces[pieces.length-1]. Wenn keine Kommas oder Leerzeichen vorhanden sind, wird die Zeichenfolge einfach so ausgegeben, wie sie angegeben wurde.

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

55
Sie können auch pieces.pop()das letzte Element Ihres Arrays abrufen.
Trent

4
Gibt es eine Möglichkeit, damit auf str.split () zurückzugreifen, ohne die Variable speichern zu müssen?
Tanner

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

788

Es gibt einen Einzeiler für alles. :) :)

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

6
Problem hier ist , dass pop () auch entfernt das Element aus dem Array, ändert es damit.
Schrägstrich, was auch immer

50
@Jangla: Das ist kein Problem, da das Array durch den splitAufruf erstellt wird, wird es sowieso nicht beibehalten. Die ursprüngliche Zeichenfolge wird nicht geändert, indem das Element aus dem Array entfernt wird.
Guffa

1
Genial, alles auf einmal, keine Zwischenvariable erforderlich, um das Array
einzurichten

@Guffa Weißt du, wie ich die letzten beiden Elemente von split bekommen kann?
Vitor Guerreiro

2
@MarioLevrero: Dies ist ein Quantifizierer, der dasselbe wie der Quantifizierer bedeutet {1,}, dh [, ]+mit einem oder mehreren der Zeichen in der Menge (Komma und Leerzeichen) übereinstimmt. Es ist nützlich, wenn Sie alle Wörter aus der Zeichenfolge möchten, aber wenn Sie nur das letzte Wort möchten, macht dies keinen funktionalen Unterschied. Es reduziert nur den Overhead, da weniger Zeichenfolgen im Array vorhanden sind.
Guffa

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

10
Ich glaube nicht, dass pop () Argumente braucht.
Grace Shao


5
Generell .split(',').pop()funktioniert dies jedoch für das letzte Element in einer durch Kommas getrennten Zeichenfolge. Sag nur, weil ich von Guffas großartiger Antwort in die Irre geführt wurde. Ich habe sie einfach ignoriert, weil ich keinen regulären Ausdruck brauchte und dachte, der Trick wäre da! : P
Cregox

24

Sie können auch in Betracht ziehen, Ihr Array umzukehren und das erste Element zu übernehmen. Auf diese Weise müssen Sie nicht über die Länge Bescheid wissen, aber es bringt keine wirklichen Vorteile und den Nachteil, dass der umgekehrte Vorgang bei großen Arrays länger dauern kann:

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

Es ist zwar einfach, ändert aber auch das betreffende ursprüngliche Array. Das könnte ein Problem sein oder auch nicht.

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

Wahrscheinlich möchten Sie dies jedoch verwenden:

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

1
Die .pop()Methode ist die beste Antwort, die ich bisher gesehen habe. Deshalb wurde es geschaffen!
Nicholas Porter

Ich würde dringend von reverse () abraten, da das Umkehren bei großen Arrays teuer ist. Wenn Sie sich nicht für Mutationen interessieren, verwenden Sie einfach pop (), andernfalls Slice (-1) [0].
wortwart

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

Das beste überhaupt und mein Favorit.


Ah natürlich. Dies ist eine großartige Antwort, da das ursprüngliche +1
jhamPac

3

Und wenn Sie kein Array erstellen möchten ...

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

Die Aufschlüsselung in Englisch lautet:

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

Das Ersetzen sagt nur, ersetze die gesamte Zeichenfolge durch das Zeug nach dem letzten Trennzeichen.

So können Sie sehen, wie dies allgemein angewendet werden kann. Beachten Sie, dass die ursprüngliche Zeichenfolge nicht geändert wird.


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

Sie können direkt auf den Array-Index zugreifen:

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


3
Hallo tnong, willkommen bei SO! Ich denke, diese Antwort berücksichtigt nicht das in der Frage geforderte Leerzeichen.
John-Philip

1
Diese Antwort unterstützt keine beliebige String-Array-Länge
Nima Soroush
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.