Rumah >hujung hadapan web >tutorial js >Bagaimanakah fungsi JavaScript yang disediakan melaksanakan pengisihan semula jadi bagi tatasusunan rentetan yang mengandungi nombor?

Bagaimanakah fungsi JavaScript yang disediakan melaksanakan pengisihan semula jadi bagi tatasusunan rentetan yang mengandungi nombor?

Susan Sarandon
Susan Sarandonasal
2024-11-11 21:11:03898semak imbas

How does the provided JavaScript function implement natural sorting of an array of strings containing numbers?

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:

  1. Tokenize String:

    • Fungsi ini Tokenize rentetan input, memisahkan nombor daripada aksara. Token disimpan sebagai pasangan dalam tatasusunan, dengan elemen pertama ialah nombor (atau Infiniti jika tiada nombor), dan elemen kedua ialah aksara bukan angka.
  2. Gelung Perbandingan:

    • Ia memasuki gelung yang berulang pada token dua rentetan input.
    • Dalam setiap lelaran, ia membandingkan elemen pertama (nombor ) atau elemen kedua (watak) pasangan token.
    • Jika satu lebih besar, fungsi mengembalikan hasil perbandingan (positif untuk a, negatif untuk b). Jika mereka sama, ia diteruskan ke pasangan seterusnya.
  3. Mengendalikan Panjang Token Tidak Sama:

    • Jika ada elemen masih dalam salah satu tatasusunan token, perbezaan panjangnya dikembalikan sebagai hasil perbandingan.

Contoh:

Berikut ialah contoh menggunakan pendekatan ini untuk mengisih tatasusunan:

<br>fungsi naturalCompare(a, b) {</p>
<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 &amp;&amp; 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn