Tôi muốn sắp xếp một chuỗi các chuỗi (trong javascript) sao cho các nhóm chữ số trong chuỗi được so sánh dưới dạng số nguyên không phải là chuỗi. Tôi không lo lắng về số điểm đã ký hoặc dấu phẩy động.cách sắp xếp chuỗi theo javascript số
ví dụ, kết quả nên ["a1b3","a9b2","a10b2","a10b11"]
không ["a1b3","a10b11","a10b2","a9b2"]
Cách đơn giản nhất để làm điều này dường như được chia mỗi chuỗi trên ranh giới xung quanh nhóm chữ số. Có một mẫu mà tôi có thể chuyển tới String.split để phân chia ranh giới ký tự mà không xóa bất kỳ ký tự nào không?
"abc11def22ghi".split(/?/) = ["abc","11","def","22","ghi"];
Hoặc là có một cách khác để so sánh chuỗi không liên quan đến việc tách chúng lên, có lẽ bằng cách đệm tất cả các nhóm chữ số với số không hàng đầu vì vậy chúng có cùng độ dài?
"aa1bb" => "aa00000001bb", "aa10bb" => "aa00000010bb"
tôi đang làm việc với chuỗi tùy ý, không dây có một thỏa thuận cụ thể của nhóm chữ số.
Chỉnh sửa:
Tôi thích /(\d+)/
một lớp lót từ Gaby để chia mảng. Làm thế nào tương thích ngược là?
Các giải pháp phân tích cú pháp chuỗi một lần theo cách có thể được sử dụng để xây dựng lại bản gốc hiệu quả hơn nhiều so với chức năng so sánh này. Không có câu trả lời nào xử lý một số chuỗi bắt đầu bằng chữ số và các số khác thì không, nhưng điều đó sẽ dễ dàng đủ để khắc phục và không rõ ràng trong câu hỏi ban đầu.
["a100","a20","a3","a3b","a3b100","a3b20","a3b3","!!","~~","9","10","9.5"].sort(function (inA , inB) {
var result = 0;
var a , b , pattern = /(\d+)/;
var as = inA.split(pattern);
var bs = inB.split(pattern);
var index , count = as.length;
if (('' === as[0]) === ('' === bs[0])) {
if (count > bs.length) count = bs.length;
for (index = 0 ; index < count && 0 === result ; ++index) {
a = as[index]; b = bs[index];
if (index & 1) {
result = a - b;
} else {
result = !(a < b) ? (a > b) ? 1 : 0 : -1;
}
}
if (0 === result) result = as.length - bs.length;
} else {
result = !(inA < inB) ? (inA > inB) ? 1 : 0 : -1;
}
return result;
}).toString();
kết quả: "!!,9,9.5,10,a3,a3b,a3b3,a3b20,a3b100,a20,a100,~~"
Các phần không phải là số có luôn giống nhau không? Nếu không, liệu thuật toán sắp xếp có sắp xếp chúng theo thứ tự ASCII không? –
Trong ví dụ của bạn, trích xuất 13, 92, 102, 1011? Hoặc là nó giống như 1.3, 9.2, 10.2, 10.11? Ý tôi là số đầu tiên quan trọng hơn hoặc là những chữ cái vừa bị bỏ qua? –
... oh bạn vẫn muốn sắp xếp trên các số nguyên không, tôi nhận được nó ngay bây giờ ... –