2016-04-26 11 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

は比較関数である1つのオプションの引数を取ります。この比較機能は、必要に応じて定義することができます。

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 
});