6

我需要根据字母对数组进行排序。我试过 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"
]
4

3 回答 3

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

应该工作(jsFiddle)

于 2013-07-08T09:16:54.847 回答
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);
于 2013-07-08T09:20:54.213 回答
1

toUpperCase要通过应用于元素的键函数(此处)对数组进行排序, Schwartzian transform,又名“装饰-排序-不装饰”是您选择的技术:

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]
})

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

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

于 2013-07-08T09:27:08.383 回答