排序混合字母/数字阵列 [英] Sort mixed alpha/numeric array

查看:86
本文介绍了排序混合字母/数字阵列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个混合阵列,我需要按照字母排序,然后按数字

 〔A1,A10,A11,A12,A2,A3,A4,B10,B2,F1,F12,F]

我如何对它进行排序是:

  [A1,A2,A3,A4,A10,A11,A12,B2,B10,F1,F3,F12]

我曾尝试

  arr.sort(功能(A,B){返回 -  B});

但只按字母顺序进行排序。
可这可采用标准JavaScript或jQuery的做什么?

感谢您!


解决方案

  VAR REA = / [^ A-ZA-Z] /克;
VAR REN = / [^ 0-9] /克;
功能sortAlphaNum(A,B){
    变种AA = a.replace(REA,);
    变种BA = b.replace(REA,);
    如果(AA === BA){
        变种AN = parseInt函数(a.replace(仁,),10);
        VAR bN的= parseInt函数(b.replace(仁,),10);
        返回=== bN的? 0:AN> bN的? 1:-1;
    }其他{
        返回AA> BA? 1:-1;
    }
}
[A1,A10,A11,A12,A2,A3,A4,B10,B2,F1,F12,F3。排序(sortAlphaNum);

I have a mixed array that i need to sort by alphabet and then by digit

[A1, A10, A11, A12, A2, A3, A4, B10, B2, F1, F12, F3]

how do i sort it to be:

[A1, A2, A3, A4, A10, A11, A12, B2, B10, F1, F3, F12]

i have tried

arr.sort(function(a,b) {return a - b});

but that only sorts it alphabetically. Can this be done with either straight JavaScript or jQuery?

Thank you!

解决方案

var reA = /[^a-zA-Z]/g;
var reN = /[^0-9]/g;
function sortAlphaNum(a,b) {
    var aA = a.replace(reA, "");
    var bA = b.replace(reA, "");
    if(aA === bA) {
        var aN = parseInt(a.replace(reN, ""), 10);
        var bN = parseInt(b.replace(reN, ""), 10);
        return aN === bN ? 0 : aN > bN ? 1 : -1;
    } else {
        return aA > bA ? 1 : -1;
    }
}
["A1", "A10", "A11", "A12", "A2", "A3", "A4", "B10", "B2", "F1", "F12", "F3"].sort(sortAlphaNum);

这篇关于排序混合字母/数字阵列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆