Isih Semulajadi Elemen Tatasusunan (Rentetan dengan Nombor)
Mengisih tatasusunan rentetan yang mengandungi nombor dengan cara yang bermakna boleh menjadi mencabar. Mengisih mereka secara leksikografi selalunya menghasilkan susunan yang tidak dijangka. Untuk mencapai susunan "isih semula jadi" yang dikehendaki, kita boleh menggunakan pendekatan berikut:
Penyelesaian:
Fungsi JavaScript yang disediakan menggunakan fungsi perbandingan tersuai yang dipanggil naturalCompare. Begini cara ia berfungsi:
Tokenize String:
Gelung Perbandingan:
Mengendalikan Panjang Token Tidak Sama:
Contoh:
Berikut ialah contoh menggunakan pendekatan ini untuk mengisih tatasusunan:
<br>fungsi naturalCompare(a, b) {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">// Tokenization var ax = [], bx = []; a.replace(/(\d+)|(\D+)/g, function(_, , ) { ax.push([ || Infinity, || ""]) }); b.replace(/(\d+)|(\D+)/g, function(_, , ) { bx.push([ || Infinity, || ""]) }); // Comparison while(ax.length && bx.length) { var an = ax.shift(); var bn = bx.shift(); var nn = (an[0] - bn[0]) || an[1].localeCompare(bn[1]); if(nn) return nn; } // Handling unequal length return ax.length - bx.length;
}
// Isih tatasusunan ujian
let arr = ["IL0 Foo", "PI0 Bar", "IL10 Baz", "IL3 Bob menyapa"];
arr.sort(naturalCompare);
console.log(arr );
Output:
[
"IL0 Foo",
"IL3 Bob menyapa",
"IL10 Baz",
"PI0 Bar"
]
Atas ialah kandungan terperinci Bagaimanakah fungsi JavaScript yang disediakan melaksanakan pengisihan semula jadi bagi tatasusunan rentetan yang mengandungi nombor?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!