我需要根据字母表对数组进行排序。我已经尝试过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 :(得分: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]
})
这种方法的主要优点是对于每个元素只调用一次关键函数,这在密钥很重或有副作用时很重要。
我意识到你现在正在寻找一个简单的答案,但这可能是你考虑将来学习的东西。