Javascript - 排序字母数字组合

标签 javascript arrays string sorting

我有字母和数字的组合。例如:2E12、1Z10、3D13、3D03、FB14、X002等

我尝试了一些方法来对这些字符串进行排序,但似乎没有任何效果。 parseInt 以 block 的形式工作,但整个数组从未排序(它是一个 json 数组),如果第二次运行排序,则会出现不同的结果。

我也曾尝试使用正则表达式将所有字母替换为数字,但这会产生逻辑错误。每次替换字符串中间的大字母时,数字都会增加 10 或 20 倍。例如,1Z10 将创建 12610,即使它以 1 开头并且应该排在顶部。

有谁知道如何对这些字符串进行排序?字母在前还是数字在前都没有关系,只要我能摆脱那些随机的零散信息即可。

提前致谢!

最佳答案

如果你想让数字序列像数字一样排序,在字母和 所以 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
*/

关于Javascript - 排序字母数字组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6019731/

相关文章:

javascript - 在 Redmine 插件中包含 jquery

javascript - 使用 Angular JS 更改单击时按钮的文本

java - 以特定方式乘以二维数组的大小?

python - 如何在 Python 中获取字符的位置?

输出中的 Java 字符串连接错误

c - strncpy 添加字符

javascript - react 减少 : Getting error 'dispatch is not a function' during 'connect'

javascript - POST 成功后 Ajax 重定向到另一个页面

arrays - '[任何? ]' is not convertible to ' 有什么东西吗?

c++ - print 函数中的 for(auto) 循环抛出错误,为什么?