2013-04-17 3 views
5

Così ho un metodo di ordinamento progettato per ordinare i valori in ordine alfabetico, che funziona alla grande in quasi tutti i casi:As3 Ordinamento alfabetico e numericamente Contemporaneamente

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

Il problema è, però, quando un titolo contiene un numero in esso.

Ad esempio:

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

sarebbe sorta di

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

ma cosa devo accadere è affinchè ordinare alfabeticamente ma quando incontra un numero un valore numerico viene preso in considerazione e in tal modo l'ordinamento sarebbe tornato

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

Speravo ci fosse una sorta di exis ting regex o algoritmi costruiti per fare questo, ma temo di non avere la minima idea di cosa cercare. Tutte le mie ricerche per l'ordinamento lo fanno alfabeticamente o numericamente, non entrambe.

grazie mille!

risposta

4

Ho trovato una soluzione JavaScript che si traduce in AS3: Sort mixed alpha/numeric array.

La soluzione sarebbe simile:

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

funziona perfettamente, grazie mille! – rcooper102