Mendapatkan elemen terakhir dari array string pisah


183

Saya perlu mendapatkan elemen terakhir dari array dengan banyak pemisah. Pemisah adalah koma dan ruang. Jika tidak ada pemisah, ia harus mengembalikan string asli.

Jika stringnya adalah "bagaimana, apa yang kamu lakukan, hari ini?" itu harus kembali "hari ini?"

Jika inputnya adalah "halo" maka outputnya harus "halo".

Bagaimana saya bisa melakukan ini dalam JavaScript?

Jawaban:


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

Pada titik ini, piecesadalah sebuah array dan pieces.lengthberisi ukuran array sehingga untuk mendapatkan elemen terakhir dari array, Anda periksa pieces[pieces.length-1]. Jika tidak ada koma atau spasi, itu hanya akan menghasilkan string seperti yang diberikan.

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

55
Anda juga bisa menggunakan pieces.pop()untuk mendapatkan item terakhir dari array Anda.
Trent

4
apakah ada cara untuk menggunakan ini untuk merujuk kembali ke str.split () tanpa harus menyimpan variabel?
Tanner

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

788

Ada satu garis untuk semuanya. :)

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

6
Masalah di sini adalah bahwa pop () juga menghapus elemen itu dari array, sehingga mengubahnya.
tebas apa pun

50
@Jangla: Itu bukan masalah, karena array dibuat oleh splitpanggilan, itu tidak disimpan. String asli tidak diubah dengan memunculkan item dari array.
Guffa

1
brilian, semuanya dalam sekali jalan, tidak perlu perantara var untuk mengatur array ... bagus
virtualeyes

@ Guffa Apakah Anda tahu bagaimana saya bisa mendapatkan dua elemen perpecahan terakhir?
Vitor Guerreiro

2
@MarioLevrero: Itu adalah quantifier yang artinya sama dengan quantifier {1,}, yaitu [, ]+cocok dengan satu atau lebih karakter dalam set (koma dan spasi). Ini berguna ketika Anda ingin semua kata dari string, tetapi ketika Anda hanya ingin kata terakhir itu tidak membuat perbedaan fungsional, itu hanya mengurangi overhead karena akan ada lebih sedikit string dalam array.
Guffa

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

10
Saya tidak berpikir pop () mengambil argumen.
Grace Shao


5
Tapi, secara umum .split(',').pop()bekerja untuk elemen terakhir pada string yang dipisahkan koma. Katakan saja karena aku disesatkan oleh jawaban Guffa yang luar biasa, aku mengabaikannya karena tidak butuh regex dan berpikir triknya ada di sana! : P
cregox

25

Anda juga dapat mempertimbangkan untuk membalikkan array dan mengambil elemen pertama. Dengan begitu Anda tidak perlu tahu tentang panjangnya, tetapi itu tidak membawa manfaat nyata dan kerugian bahwa operasi sebaliknya mungkin lebih lama dengan array besar:

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

Meskipun mudah, tetapi juga memodifikasi array asli yang dimaksud. Itu mungkin atau mungkin tidak menjadi masalah.

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

Mungkin Anda mungkin ingin menggunakan ini:

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

1
The .pop()Metode adalah jawaban terbaik yang pernah kulihat sejauh ini. Itu sebabnya itu dibuat!
Nicholas Porter

Saya akan sangat menyarankan agar reverse () karena membalikkan akan mahal pada array besar. Jika Anda tidak peduli dengan mutasi, cukup gunakan pop (), jika tidak, iris (-1) [0].
berjalan

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

Yang terbaik dan favorit saya.


Ah tentu saja. Ini adalah jawaban yang bagus karena tidak mengubah +1 asli
jhamPac

3

Dan jika Anda tidak ingin membuat array ...

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

Rincian dalam bahasa Inggris adalah:

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

Pengganti hanya mengatakan ganti seluruh string dengan barang setelah pemisah terakhir.

Jadi Anda bisa melihat bagaimana ini bisa diterapkan secara umum. Perhatikan string asli tidak dimodifikasi.


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

Anda dapat mengakses indeks array secara langsung:

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


3
Halo, selamat datang di SO! Saya pikir jawaban ini tidak memperhitungkan pemisah ruang seperti yang diminta dalam pertanyaan.
John-Philip

1
Jawaban ini tidak mendukung panjang larik string arbitrer
Nima Soroush
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.