基于字母排序数组?

时间:2013-07-08 09:12:41

标签: javascript

我需要根据字母表对数组进行排序。我已经尝试过javascript的sort()方法,但它不起作用,因为我的数组由数字,小写字母和大写字母组成。有人可以帮我解决这个问题吗?感谢

例如,我的数组是:

[
    "@Basil",
    "@SuperAdmin",
    "@Supreme",
    "@Test10",
    "@Test3",
    "@Test4",
    "@Test5",
    "@Test6",
    "@Test7",
    "@Test8",
    "@Test9",
    "@a",
    "@aadfg",
    "@abc",
    "@abc1",
    "@abc2",
    "@abc5",
    "@abcd",
    "@abin",
    "@akrant",
    "@ankur",
    "@arsdarsd",
    "@asdd",
    "@ashaa",
    "@aviral",
    "@ayush.kansal",
    "@chris",
    "@dgji",
    "@dheeraj",
    "@dsfdsf",
    "@dualworld",
    "@errry",
    "@george",
    "@ggh",
    "@gjhggjghj"
]

3 个答案:

答案 0 :(得分:7)

a.sort(function(a, b) {
    var textA = a.toUpperCase();
    var textB = b.toUpperCase();
    return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;
});

This应该有用(jsFiddle)

答案 1 :(得分:4)

function alphabetical(a, b){
     var c = a.toLowerCase();
     var d = b.toLowerCase();
     if (c < d){
        return -1;
     }else if (c > d){
       return  1;
     }else{
       return 0;
     }
}


yourArray.sort(alphabetical);

答案 2 :(得分:1)

要通过应用于元素的键函数(此处为toUpperCase)对数组进行排序,Schwartzian transform,又称“decorate-sort-undecorate”是您的首选技术:

cmp = function(x, y) { return x > y ? 1 : x < y ? -1 : 0 }

sorted = array.map(function(x) {
    return [x.toUpperCase(), x]
}).sort(function(x, y) {
    return cmp(x[0], y[0])
}).map(function(x) {
    return x[1]
})

这种方法的主要优点是对于每个元素只调用一次关键函数,这在密钥很重或有副作用时很重要。

我意识到你现在正在寻找一个简单的答案,但这可能是你考虑将来学习的东西。