Lấy phần tử cuối cùng của mảng chuỗi tách


182

Tôi cần lấy phần tử cuối cùng của một mảng phân tách có nhiều dấu phân cách. Các phân cách là dấu phẩy và không gian. Nếu không có dấu phân cách thì nên trả về chuỗi gốc.

Nếu chuỗi là "làm thế nào, bạn đang làm gì, hôm nay?" nó sẽ trở lại "ngày hôm nay?"

Nếu đầu vào là "xin chào" thì đầu ra phải là "xin chào".

Làm thế nào tôi có thể làm điều này trong JavaScript?

Câu trả lời:


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

Tại thời điểm này, pieceslà một mảng và pieces.lengthchứa kích thước của mảng để có được phần tử cuối cùng của mảng, bạn kiểm tra pieces[pieces.length-1]. Nếu không có dấu phẩy hoặc dấu cách, nó sẽ chỉ xuất ra chuỗi như đã cho.

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

55
Bạn cũng có thể sử dụng pieces.pop()để lấy mục cuối cùng của mảng.
Trent

4
Có cách nào để sử dụng điều này để quay lại str.split () mà không phải lưu trữ biến không?
Tanner

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

788

Có một lớp lót cho tất cả mọi thứ. :)

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

6
Vấn đề ở đây là pop () cũng loại bỏ phần tử đó khỏi mảng, do đó thay đổi nó.
slashwhthing

50
@Jangla: Đó không phải là vấn đề, vì mảng được tạo bởi splitcuộc gọi, dù sao nó cũng không được giữ lại. Chuỗi ban đầu không được thay đổi bằng cách bật mục từ mảng.
Guffa

1
rực rỡ, tất cả trong một lần, không cần var trung gian để thiết lập mảng ... tốt
virtualeyes

@Guffa Bạn có biết làm thế nào tôi có thể có được hai yếu tố cuối cùng của sự phân chia?
Vitor Guerreiro

2
@MarioLevrero: Đó là một bộ định lượng có nghĩa giống như bộ định lượng {1,}, tức là [, ]+khớp với một hoặc nhiều ký tự trong tập hợp (dấu phẩy và dấu cách). Nó hữu ích khi bạn muốn tất cả các từ trong chuỗi, nhưng khi bạn chỉ muốn từ cuối cùng thì nó không tạo ra bất kỳ sự khác biệt về chức năng nào, nó chỉ làm giảm chi phí vì sẽ có ít chuỗi hơn trong mảng.
Guffa

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

10
Tôi không nghĩ pop () có lý lẽ.
Grace Shao


5
Nhưng, nói chung .split(',').pop()hoạt động cho phần tử cuối cùng trên chuỗi được phân tách bằng dấu phẩy. Chỉ cần nói rằng tôi đã bị đánh lừa bởi câu trả lời tuyệt vời của Guffa, tôi chỉ coi nhẹ nó vì không cần một regex và nghĩ rằng trò lừa bịp ở đó! : P
cregox

24

Bạn cũng có thể xem xét để đảo ngược mảng của bạn và lấy phần tử đầu tiên. Bằng cách đó, bạn không cần phải biết về độ dài, nhưng nó không mang lại lợi ích thực sự và nhược điểm là thao tác ngược có thể mất nhiều thời gian hơn với các mảng lớn:

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

Mặc dù điều này dễ, nhưng cũng sửa đổi mảng ban đầu trong câu hỏi. Điều đó có thể hoặc không thể là một vấn đề.

Tham khảo: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse

Có lẽ bạn có thể muốn sử dụng điều này mặc dù:

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

1
Các .pop()phương pháp là câu trả lời tốt nhất mà tôi đã nhìn thấy cho đến nay. Đó là lý do tại sao nó được tạo ra!
Nicholas Porter

Tôi thực sự khuyên bạn không nên đảo ngược () vì việc đảo ngược sẽ tốn kém trên các mảng lớn. Nếu bạn không quan tâm đến đột biến, chỉ cần sử dụng pop (), nếu không thì lát (-1) [0].
wortwart

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

Một trong những tốt nhất bao giờ hết và yêu thích của tôi.


Tất nhiên rồi. Đây là một câu trả lời tuyệt vời vì nó không làm thay đổi +1 gốc
jhamPac

3

Và nếu bạn không muốn xây dựng một mảng ...

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

Sự cố trong tiếng Anh là:

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

Việc thay thế chỉ nói thay thế toàn bộ chuỗi bằng công cụ sau dấu phân cách cuối cùng.

Vì vậy, bạn có thể thấy làm thế nào điều này có thể được áp dụng nói chung. Lưu ý chuỗi gốc không được sửa đổi.


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

Bạn có thể truy cập chỉ mục mảng trực tiếp:

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


3
Xin chào tnong, chào mừng bạn đến với SO! Tôi nghĩ rằng câu trả lời này không tính đến dấu phân cách không gian như được yêu cầu trong câu hỏi.
John-Philip

1
Câu trả lời này không hỗ trợ độ dài mảng chuỗi tùy ý
Nima Soroush
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.