membandingkan 2 string menurut abjad untuk tujuan penyortiran


105

Saya mencoba membandingkan 2 string menurut abjad untuk tujuan penyortiran. Misalnya saya ingin memiliki cek boolean seperti if('aaaa' < 'ab'). Saya mencobanya, tetapi tidak memberikan hasil yang benar, jadi saya rasa itu bukan sintaks yang tepat. Bagaimana saya melakukan ini di jquery atau Javascript?


2
Pernahkah Anda melihat stackoverflow.com/questions/1134976/… ?
j08691

Begitulah cara Anda melakukannya. Hasil apa yang Anda harapkan? Ekspresi 'aaaa' < 'ab'kembali true. <! - edit salah untuk menghapus suara ->
Guffa

Jawaban:


122

Mari kita lihat beberapa kasus pengujian - coba jalankan ekspresi berikut di konsol JS Anda:

"a" < "b"

"aa" < "ab"

"aaa" < "aab"

Semua kembali benar.

JavaScript membandingkan string karakter demi karakter dan "a" muncul sebelum "b" dalam alfabet - karenanya kurang dari.

Dalam kasus Anda, ini berfungsi seperti itu -

1. " A aaa" < " a b"

membandingkan dua karakter "a" pertama - semuanya sama, mari pindah ke karakter berikutnya.

2. "a a aa" < "a b "

membandingkan karakter kedua "a" melawan "b" - teriakan! "a" datang sebelum "b". Mengembalikan nilai true.


2
untuk diskusi tentang karakter khusus seperti Č, č, Š, š, Ž, ž, lihat stackoverflow.com/questions/6909126/…
dsdsdsdsd

4
Mengesankan bahwa ini adalah bawaan asli!
Slava Knyazev

11
Sesuatu yang perlu diingat akan menjadi modal. "a" < "b" === true "a" < "B" === false.
Ted van Riel

141

Anda mengatakan bahwa perbandingan itu untuk tujuan penyortiran. Maka saya menyarankan sebagai gantinya:

"a".localeCompare("b");

Ia kembali -1sejak "a" < "b", 1atau 0sebaliknya, seperti yang Anda butuhkan untuk Array.prototype.sort ()

Perlu diingat bahwa pengurutan bergantung pada lokal. Misalnya dalam bahasa Jerman, äadalah varian dari a, jadi "ä".localeCompare("b", "de-DE")kembali -1. Dalam bahasa Swedia, äadalah salah satu huruf terakhir dalam alfabet, sehingga "ä".localeCompare("b", "se-SE")menghasilkan 1.

Tanpa parameter kedua ke localeCompare, lokal browser digunakan. Yang menurut pengalaman saya tidak pernah saya inginkan, karena itu akan diurutkan secara berbeda dari server, yang memiliki lokasi tetap untuk semua pengguna.


6
+1 juga perlu disebutkan bahwa ini juga bagus untuk kasus ( "aa".localeCompare("ab")== "aa" .localeCompare ("Ab") untuk lokal mana pun yang dapat saya pikirkan) dan bekerja bahkan di versi lama IE. Seharusnya jawaban yang diterima!
user56reinstatemonica8

1
1 untuk Peter; Ini lebih kompatibel dengan cara kerja penyortiran array Javascript sehingga lebih berguna, dan saya pikir itu lebih dari apa yang diminta OP.
Penutupan

Saya kira, ini seharusnya jawaban yang benar. Satu-satunya cara untuk membuat perbandingan string menurut abjad ( bukan Unicode ).
Limbo

Ini sepertinya benar-benar berhasil, bahkan untuk nilai alfanumerik. Terima kasih.
Joshua Pinter

30

Ingatlah bahwa perbandingan string seperti "x"> "X" peka huruf besar / kecil

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

Anda dapat menggunakan .toLowerCase()untuk membandingkan tanpa sensitivitas huruf besar / kecil.



3

Katakanlah kita memiliki array objek:

{ name : String }

maka kita bisa mengurutkan array kita sebagai berikut:

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

Catatan: Hati-hati untuk huruf besar, Anda mungkin perlu mengubah string Anda menjadi huruf kecil karena tujuan Anda.


Fungsi yang digunakan untuk menyortir seharusnya mengembalikan 0 jika sama. Fungsi ini hanya mengembalikan -1 atau 1.
Steve
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.