簡體   English   中英

Javascript - 排序字母數字組合

[英]Javascript - Sort Letter Number Combination

我有字母和數字的組合。 例如:2E12,1Z10,3D13,3D03,FB14,X002等。

我嘗試了一些方法來對這些字符串進行排序,但似乎沒有任何工作。 parseInt在叢中工作,但整個數組從不排序(它是一個json數組),如果第二次運行排序,則會出現不同的結果。

我也嘗試使用正則表達式用數字替換所有字母,但這會產生邏輯錯誤。 每次更換字符串中間的大字母時,它會將數字增加10或20倍。例如,1Z10將創建12610,即使它以1開頭並且應該向頂部排序。

有誰知道如何排序這些字符串? 如果字母是第一個或數字是第一個並不重要,只要我可以擺脫隨機的問題。

提前致謝!

如果你想要數字序列進行排序,好像它們是數字,在alphas之前排序,以便在2之后排序100,你需要所謂的自然排序 -

這是一個例子,谷歌會發現更多。

// case insensitive, digits to number interpolation

function natSort(as, bs){
    var a, b, a1, b1, i= 0, L, rx=  /(\d+)|(\D+)/g, rd=  /\d/;
    if(isFinite(as) && isFinite(bs)) return as - bs;
    a= String(as).toLowerCase();
    b= String(bs).toLowerCase();
    if(a=== b) return 0;
    if(!(rd.test(a) && rd.test(b))) return a> b? 1: -1;
    a= a.match(rx);
    b= b.match(rx);
    L= a.length> b.length? b.length: a.length;
    while(i < L){
        a1= a[i];
        b1= b[i++];
        if(a1!== b1){
            if(isFinite(a1) && isFinite(b1)){
                if(a1.charAt(0)=== "0") a1= "." + a1;
                if(b1.charAt(0)=== "0") b1= "." + b1;
                return a1 - b1;
            }
            else return a1> b1? 1: -1;
        }
    }
    return a.length - b.length;
}

var s ='2E12,1Z10,1z2,3D13,3D03,FB14,X002'.split(',');

s.sort(natSort)

/*  returned value: (Array)
1z2,1Z10,2E12,3D03,3D13,FB14,X002
*/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM