2013-07-08 63 views
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" 
] 
+0

如果不包含字母和数字,您希望对它进行排序,您可以选择哪种“字母”? *默认字母表有什么*错误,您期望得到什么结果? – Bergi

+0

数组似乎对我分类... – mishik

+4

你想要的输出到底是什么? – Christoph

回答

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

This应该工作(的jsfiddle)

+0

谢谢这个作品:) –

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); 
1

要按应用于元素的一个关键功能的阵列(toUpperCase这里) ,Schwartzian transform,又名“装饰,分类,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] 
}) 

这种方法的主要优点是每个元素只需调用一次关键函数,当关键点很重或有副作用时,这个问题可能很重要。

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

+0

不适用于'[“a”,“a! “]'或类似的(任何字符<',') – Bergi

+0

@Bergi:当然是的。 – georg

+0

不,它产生'[“a!”,“a”]'而它应该是'[“a”,“a!”]'。您只需按阵列的装饰部分进行排序。 – Bergi