so sánh 2 chuỗi theo thứ tự bảng chữ cái cho mục đích sắp xếp


105

Tôi đang cố gắng so sánh 2 chuỗi theo thứ tự bảng chữ cái để sắp xếp. Ví dụ, tôi muốn kiểm tra boolean như thế nào 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 cách nào để thực hiện việc này trong jquery hoặc Javascript?


2
Bạn đã thấy stackoverflow.com/questions/1134976/… chưa?
j08691

Đó là cách bạn làm điều đó. Bạn mong đợi kết quả nào? Biểu thức 'aaaa' < 'ab'trả về true. <! - chỉnh sửa sai để xóa phiếu bầu ->
Guffa

Câu trả lời:


122

Hãy xem một số trường hợp thử nghiệm - hãy thử chạy các biểu thức sau trong bảng điều khiển JS của bạn:

"a" < "b"

"aa" < "ab"

"aaa" < "aab"

Tất cả đều trả về true.

JavaScript so sánh các chuỗi ký tự theo ký tự và "a" đứng 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 ký tự "a" đầu tiên - tất cả đều bằng nhau, cho phép chuyển sang ký tự tiếp theo.

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

so sánh các ký tự thứ hai "a" với "b" - whoop! "a" đứng trước "b". Trả về true.


2
để thảo luận về các ký tự đặc biệt như Č, č, Š, š, Ž, ž, hãy xem stackoverflow.com/questions/6909126/…
dsdsdsdsd

4
Ấn tượng rằng điều này được tích hợp sẵn!
Slava Knyazev

11
Một cái gì đó cần ghi nhớ sẽ là viết hoa. "a" < "b" === true "a" < "B" === false.
Ted van Riel

141

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

"a".localeCompare("b");

Nó trả về -1từ "a" < "b", 1hoặc 0nếu không, giống như bạn cần cho Array.prototype.sort ()

Hãy nhớ rằng việc sắp xếp phụ thuộc vào ngôn ngữ. Ví dụ: trong tiếng Đức, älà một biến thể của a, vì vậy "ä".localeCompare("b", "de-DE")trả về -1. Trong tiếng Thụy Điển, älà một trong những 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 localeCompare, ngôn ngữ của trình duyệt sẽ được sử dụng. Theo kinh nghiệm của tôi, điều này không bao giờ là điều tôi muốn, bởi vì sau đó nó sẽ sắp xếp khác với máy chủ, có ngôn ngữ cố định cho tất cả người dùng.


6
+1 cũng đáng nói rằng điều này cũng tốt cho các trường hợp ( "aa".localeCompare("ab")== "aa" .localeCompare ("Ab") cho bất kỳ ngôn ngữ nào tôi có thể nghĩ đến) và hoạt động ngay cả trong các phiên bản IE cũ. Nên là câu trả lời được chấp nhận!
user56reinstatemonica8

1
+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, vì vậy nó hữu ích hơn và tôi nghĩ đó là những gì OP yêu cầu.
Kết thúc

Tôi cho rằng, đây phải là câu trả lời đúng. Cách duy nhất để so sánh chuỗi theo thứ tự bảng chữ cái ( không phải Unicode ).
Limbo

Điều này dường như thực sự thành công, ngay cả đối với các giá trị chữ và số. Cảm ơn.
Joshua Pinter

30

Chỉ cần nhớ rằng so sánh chuỗi như "x"> "X" phân biệt chữ hoa chữ thường

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

Bạn có thể sử dụng .toLowerCase()để so sánh mà không cần phân biệt chữ hoa chữ thường.



3

Giả sử rằng chúng ta có một mảng các đối tượng:

{ name : String }

thì chúng ta có thể sắp xếp mảng của mình như sau:

array.sort(function(a, b) {
    var orderBool = a.name > b.name;
    return orderBool ? 1 : -1;
});

Lưu ý: Hãy cẩn thận đối với các chữ cái viết hoa, bạn có thể cần chuyển chuỗi của mình thành chữ thường do mục đích của bạn.


Hàm được sử dụng để sắp xếp được cho là trả về 0 nếu chúng bằng nhau. Hàm này chỉ trả về -1 hoặc 1.
Steve
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.