同时按字母和数字排序的As3排序方法

5

我有一个按字母顺序排序值的排序方法,几乎在所有情况下都能很好地工作:

function alphabetical(name1, name2):int { 
        if (name1 < name2){ 
            return -1; 
        } else if (name1 > name2){ 
            return 1; 
        }else { 
            return 0; 
        };
    };

问题在于,当标题中包含数字时。
例如:
['abc 8','abc 1','abc 10']

would sort to

['abc 1','abc 10','abc 8']

但我需要的是按字母顺序排序,但遇到数字时需要考虑数字值,因此排序将返回正确的结果。
['abc 1','abc 8'.'abc 10']

我希望有一些现成的正则表达式或算法可以完成这个任务,但我不知道该搜什么。我所有关于排序的搜索都是按字母顺序或数字顺序排序,而不是两者兼顾。
非常感谢!
1个回答

4
我找到了一个JavaScript解决方案,可以翻译成AS3:混合字母数字数组排序
解决方案大致如下:
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;
    }
}

var arr = ['abc 8','abc 1','abc 10'];
arr.sort(sortAlphaNum);

trace(arr); // abc 1,abc 8,abc 10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接