2013-04-17 13 views
5

Vì vậy, tôi có một cách sắp xếp thiết kế để sắp xếp các giá trị theo thứ tự abc mà hoạt động tốt trong hầu hết mọi trường hợp:AS3 Sorting thứ tự chữ cái và số CNC Đồng thời

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

Vấn đề là mặc dù, khi một tiêu đề chứa một số trong đó.

Ví dụ:

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

sẽ sắp xếp để

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

nhưng những gì tôi cần phải xảy ra là cho nó để sắp xếp theo thứ tự abc nhưng khi nó gặp một số một giá trị số được đưa vào xem xét, do đó việc phân loại sẽ trả lại

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

Tôi đã hy vọng có một số loại exis ting regex hoặc thuật toán được xây dựng để làm điều này nhưng tôi sợ tôi không có manh mối nhỏ những gì để tìm kiếm. Tất cả các tìm kiếm của tôi để phân loại hoặc là theo thứ tự bảng chữ cái hoặc số, không phải cả hai.

cảm ơn rất nhiều!

Trả lời

4

Tôi đã tìm thấy giải pháp JavaScript chuyển thành AS3: Sort mixed alpha/numeric array.

Các giải pháp sẽ giống như thế:

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

tác phẩm hoàn hảo, cảm ơn rất nhiều! – rcooper102