Isih Semulajadi Elemen Tatasusunan dengan Nombor dan Abjad
Menentukan susunan elemen tatasusunan yang mengandungi nilai berangka dan aksara abjad boleh menjadi mencabar. Isihan semula jadi diperlukan untuk mengendalikan senario ini, yang menyusun elemen berdasarkan nilai sebenar mereka.
Susun Sampel dan Hasil Yang Diingini
Pertimbangkan tatasusunan input berikut:
["IL0 Foo", "PI0 Bar", "IL10 Baz", "IL3 Bob says hello"]
Tempahan diisih yang dikehendaki ialah:
["IL0 Foo", "IL3 Bob says hello", "IL10 Baz", "PI0 Bar"]
Pendekatan Isih Naif
Fungsi perbandingan yang mudah, seperti yang disediakan, menyusun elemen hanya mengikut bahagian awal (2 huruf) dan mengabaikan bahagian berangka:
function compare(a, b) { if (a < b) return -1; if (a > b) return 1; return 0; }
Pelaksanaan Isih Semulajadi dalam JavaScript
Untuk mencapai isihan semula jadi, fungsi berikut boleh digunakan:
function naturalCompare(a, b) { var ax = [], bx = []; a.replace(/(\d+)|(\D+)/g, function(_, , ) { ax.push([ || Infinity, || ""]) }); b.replace(/(\d+)|(\D+)/g, function(_, , ) { bx.push([ || Infinity, || ""]) }); 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; } return ax.length - bx.length; }
Fungsi ini membahagikan setiap elemen kepada tatasusunan pasangan, di mana elemen pertama ialah nombor (atau Infiniti jika tiada nombor) dan elemen kedua ialah rentetan:
["IL0 Foo"] -> [["0", "IL"], ["Foo", ""]] ["PI0 Bar"] -> [["0", "PI"], ["Bar", ""]]
Logik perbandingan kemudian membandingkan pasangan satu demi satu, memberi keutamaan kepada nilai berangka. Jika nilai berangka adalah sama, rentetan akan dibandingkan menggunakan localeCompare.
Contoh Penggunaan dan Hasil
Isih tatasusunan sampel menggunakan fungsi NaturalCompare:
test = [ "img12.png", "img10.png", "img2.png", "img1.png", "img101.png", "img101a.png", "abc10.jpg", "abc10", "abc2.jpg", "20.jpg", "20", "abc", "abc2", "" ]; test.sort(naturalCompare)
Tatasusunan yang diisih ialah:
["", "20", "20.jpg", "abc", "abc2", "abc2.jpg", "abc10", "abc10.jpg", "img1.png", "img2.png", "img10.png", "img12.png", "img101.png", "img101a.png"]
Atas ialah kandungan terperinci Bagaimanakah anda melaksanakan algoritma isihan semula jadi dalam JavaScript untuk tatasusunan yang mengandungi unsur alfanumerik campuran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!