2016-04-26 34 views
1

我想排序地址數組。在我的陣列上使用.sort()方法似乎很簡單。使用Javascript對地址數組排序

但是...... 試看看這裏:https://jsfiddle.net/ytuzr918/

.sort()方法排序完美字母(至少我認爲它)。然而,我的地址在數字後面有數字和更多的字母。

那麼有沒有一種方法來排序數組「正確」,可能通過原型的排序方法?

回答

2

您可以提供一個比較功能Array.prototype.sort()

here適應了答案:在JavaScript

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; 
    } 
} 
console.log(addresses.sort(sortAlphanum)); 
2

數組排序方法使用一個任選的參數,它是一個比較功能。您可以根據您的要求定義此比較功能。

arr.sort([的compareFunction])

的compareFunction(可選)。指定一個定義排序順序的函數。如果省略,則根據每個元素的字符串 轉換,根據每個 字符的Unicode代碼點值對數組進行排序。

查看Mozilla Developer Network瞭解更多詳情。

0

這是.sort()函數的非常常見的排序。你可以做的是傳遞方法你自己的自定義比較函數,以便它將使用它來確定排序順序。

addresses.sort(function (a, b) { 
    var val_a = Number.parseInt(a.replace('Nordmarksvej ', '')); 
    var val_b = Number.parseInt(b.replace('Nordmarksvej ', '')); 

    if (val_a === val_b) { 
    return 0; 
    } 

    return val_a > val_b ? 1 : -1 
});