2013-07-08 62 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