Saya mencari cara termudah untuk mengurutkan array yang terdiri dari angka dan teks, dan kombinasi dari semuanya.
Misalnya
'123asd'
'19asd'
'12345asd'
'asd123'
'asd12'
berubah menjadi
'19asd'
'123asd'
'12345asd'
'asd12'
'asd123'
Ini akan digunakan dalam kombinasi dengan solusi untuk pertanyaan lain yang saya tanyakan di sini .
Fungsi sortir itu sendiri berfungsi, yang saya butuhkan adalah fungsi yang dapat mengatakan bahwa '19asd' lebih kecil dari '123asd'.
Saya menulis ini dalam JavaScript.
Sunting: seperti yang ditunjukkan adormitu , yang saya cari adalah fungsi untuk penyortiran alami
How do you do string comparison in JavaScript?
di stackoverflow.com/questions/51165/...Jawaban:
Ini sekarang dimungkinkan di peramban modern menggunakan localeCompare. Dengan melewati
numeric: true
opsi, itu akan dengan cerdas mengenali angka. Anda dapat menggunakan case-insensitivesensitivity: 'base'
. Diuji di Chrome, Firefox, dan IE11.Ini sebuah contoh. Itu kembali
1
, artinya 10 pergi setelah 2:'10'.localeCompare('2', undefined, {numeric: true, sensitivity: 'base'})
Untuk kinerja saat menyortir sejumlah besar string, artikel itu mengatakan:
sumber
Jadi, Anda perlu jenis alami ?
Jika demikian, maka mungkin naskah ini karya Brian Huisman berdasarkan karya David koelle akan menjadi yang Anda butuhkan.
Sepertinya solusi Brian Huisman sekarang di-host langsung di blog David Koelle:
sumber
Untuk membandingkan nilai, Anda dapat menggunakan metode pembanding-
Tetapi untuk kecepatan dalam mengurutkan array, rig array sebelum menyortir, jadi Anda hanya perlu melakukan konversi huruf kecil dan ekspresi reguler sekali daripada setiap langkah melalui pengurutan.
sumber
String.prototype.tlc()
? Apakah ini kode Anda sendiri atau Anda mendapatkannya dari suatu tempat? Jika yang terakhir, harap tautkan ke halaman.Jika Anda memiliki array objek yang dapat Anda lakukan seperti ini:
Tampilkan cuplikan kode
sumber
Perpustakaan yang berfitur lengkap untuk menangani hal ini pada tahun 2019 tampaknya merupakan peraturan alami .
Itu tidak hanya mengambil array string, tetapi juga dapat mengurutkan berdasarkan nilai kunci tertentu dalam array objek. Itu juga dapat secara otomatis mengidentifikasi dan mengurutkan string: mata uang, tanggal, mata uang, dan banyak hal lainnya.
Anehnya, itu juga hanya 1,6 kB saat di-gzip.
sumber
Bayangkan fungsi padding 8 digit yang mengubah:
Kita dapat menggunakan string berlapis untuk membantu kita mengurutkan '19asd' untuk muncul sebelum '123asd'.
Gunakan ekspresi reguler
/\d+/g
untuk membantu menemukan semua angka yang perlu diisi:Berikut ini menunjukkan penyortiran menggunakan teknik ini:
Hasil antara menunjukkan apa yang dilakukan rutinitas natural_expand () dan memberi Anda pemahaman tentang bagaimana rutinitas natural_compare selanjutnya akan bekerja:
Output:
sumber
Membangun jawaban @Adrien Be di atas dan menggunakan kode yang dibuat Brian Huisman & David koelle , berikut ini adalah prototipe pengurutan yang dimodifikasi untuk berbagai objek:
sumber