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?

JJJ
sumber

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?"
Paolo Bergantino
sumber
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();
Guffa
sumber
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
mohawke
sumber
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()
Smile4ever
sumber
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.

jithil
sumber
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.

Tony
sumber
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 >>";
pengguna7425063
sumber
0

Anda dapat mengakses indeks array secara langsung:

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

di dalam
sumber
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