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
Lepaskan: 2024-11-11 21:11:03
asal
877 orang telah melayarinya

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>
<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 &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;
Salin selepas log masuk

}

// 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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan