2013-04-17 82 views
5

所以我設計的值按字母順序排序排序方法,它在幾乎所有情況下的偉大工程:AS3按字母順序排序,並在數字上同時

function alphabetical(name1, name2):int { 
     if (name1 < name2){ 
      return -1; 
     } else if (name1 > name2){ 
      return 1; 
     }else { 
      return 0; 
     }; 
    }; 

的問題是,雖然,當標題中包含一個數字。

例如:

['abc 8','abc 1','abc 10'] 

將排序,

['abc 1','abc 10','abc 8'] 

,但我需要發生的是,它按字母順序排序,但是當它遇到了一些數值被考慮和因此分類將返回

['abc 1','abc 8'.'abc 10'] 

我希望有某種類型的exis ting正則表達式或算法,但我恐怕沒有絲毫的線索去搜索。我所有的排序搜索都按字母順序或數字順序排列,而不是兩者。

非常感謝!

回答

4

我發現了一個轉換爲AS3的JavaScript解決方案:Sort mixed alpha/numeric array

該解決方案看起來是這樣的:

var reA = /[^a-zA-Z]/g; 
var reN = /[^0-9]/g; 
function sortAlphaNum(a,b) { 
    var aA = a.replace(reA, ""); 
    var bA = b.replace(reA, ""); 
    if(aA === bA) { 
     var aN = parseInt(a.replace(reN, ""), 10); 
     var bN = parseInt(b.replace(reN, ""), 10); 
     return aN === bN ? 0 : aN > bN ? 1 : -1; 
    } else { 
     return aA > bA ? 1 : -1; 
    } 
} 

var arr = ['abc 8','abc 1','abc 10']; 
arr.sort(sortAlphaNum); 

trace(arr); // abc 1,abc 8,abc 10 
+0

完美的作品,非常感謝! – rcooper102