2012-04-17 91 views
51

Tôi đang cố gắng so sánh 2 chuỗi theo thứ tự bảng chữ cái cho mục đích sắp xếp. Ví dụ tôi muốn có một kiểm tra boolean như if('aaaa' < 'ab'). Tôi đã thử nó, nhưng nó không cho tôi kết quả chính xác, vì vậy tôi đoán đó không phải là cú pháp đúng. Làm thế nào để làm điều này trong jquery hoặc Javascript?so sánh 2 chuỗi theo thứ tự bảng chữ cái cho các mục đích phân loại

+2

Bạn đã thấy http://stackoverflow.com/questions/1134976/how-may-i-sort-a-list-alphabetically -using-jquery? – j08691

+0

Đó là cách bạn làm điều đó. Bạn mong đợi kết quả gì? Biểu thức ''aaaa' <'ab'' trả về' true'. Guffa

Trả lời

73

Cho phép xem xét một số trường hợp thử nghiệm - thử chạy các mô tả sau trong giao diện điều khiển JS của bạn:

"a" < "b" 

"aa" < "ab" 

"aaa" < "aab" 

Tất cả trở thành sự thật.

JavaScript so sánh chuỗi ký tự theo ký tự và "a" xuất hiện trước "b" trong bảng chữ cái - do đó nhỏ hơn.

Trong trường hợp của bạn nó hoạt động như vậy -

1. "một aaa" < "một b"

so sánh hai "a" ký tự đầu tiên - tất cả như nhau, cho phép di chuyển đến ký tự tiếp theo.

2. "Một một aa" < "một b"

so sánh nhân vật thứ hai "a" chống lại "b" - Whoop! "a" xuất hiện trước "b". Trả về true.

+1

để thảo luận về các ký tự đặc biệt như Č, č, Š, š, Ž, ž, xem http://stackoverflow.com/questions/6909126/javascript-sort-with-unicode – dsdsdsdsd

+2

Ấn tượng rằng điều này được xây dựng trong nguyên bản! –

+4

Điều gì đó cần ghi nhớ sẽ là thủ đô. '" a "<" b "=== true'' "a" <"B" === sai'. – MegaXLR

20

Chỉ cần nhớ rằng chuỗi so sánh như "x"> "X" là trường hợp nhạy cảm

"aa" < "ab" //true 
"aa" < "Ab" //false 
55

Bạn nói rằng việc so sánh là để phân loại các mục đích. Sau đó, tôi đề nghị thay vì:

"a".localeCompare("b"); 

Nó trả -1 từ "a" < "b", 1 hoặc 0 khác, như bạn cần cho Array.prototype.sort()

Hãy ghi nhớ rằng sắp xếp phụ thuộc miền địa phương. Ví dụ. bằng tiếng Đức, ä là một biến thể của a, vì vậy "ä".localeCompare("b", "de-DE") trả lại -1. Bằng tiếng Thụy Điển, ä là một trong các chữ cái cuối cùng trong bảng chữ cái, vì vậy "ä".localeCompare("b", "se-SE") trả về 1.

Nếu không có tham số thứ hai là localeCompare, ngôn ngữ của trình duyệt sẽ được sử dụng. Mà trong kinh nghiệm của tôi là không bao giờ những gì tôi muốn, bởi vì sau đó nó sẽ sắp xếp khác với máy chủ, trong đó có một miền địa phương cố định cho tất cả người dùng.

+3

+1 cũng đáng nói rằng điều này là tốt cho các trường hợp quá ('" aa ".localeCompare (" ab ")' == "aa" .localeCompare ("Ab") cho bất kỳ miền địa phương tôi có thể nghĩ đến) và làm việc ngay cả trong các phiên bản cũ của IE. Nên là câu trả lời được chấp nhận! – user568458

+0

+1 cho Peter; Điều này tương thích hơn với cách sắp xếp mảng Javascript hoạt động như thế nào, vì vậy nó hữu ích hơn, và tôi nghĩ nó còn nhiều hơn những gì OP yêu cầu. – Grandclosing

5

"a".localeCompare("b") nên thực sự trở lại -1 từ a loại trước b

http://www.w3schools.com/jsref/jsref_localecompare.asp

+0

Nếu bạn có ý nghĩa như một bình luận cho câu trả lời của tôi, bạn nói đúng. Câu trả lời của tôi được sử dụng để hiển thị không chính xác kết quả là 1, vì vậy tôi đã sửa lỗi đó. –

Các vấn đề liên quan