2017-12-05 16 views
0

私はかなりAngularの新しいですので多分私は間違ったことを探しているだけですが、どこでも簡単に答えを見つけることはできません。角度の自然な並べ替えオブジェクトの配列

のは、私はオブジェクトの配列を持っているとしましょう:

[ 
    {Label: "UDP 128B Flood", ...}, 
    {Label: "UDP 512B Flood", ...}, 
    {Label: "UPD 1514B Flood",...}, 
    {Label: "HTTP Excessive GET",...} 
] 

これは配列で、ドロップダウンのオプションとして表示されている:

<option *ngFor="let profile of Profiles" [value]="profile.Label">{{profile.Label}}</option> 

私は彼らを確認するために、これらのオブジェクトをソートしたいです英数字の順序で表示されます。

答えて

0

array.prototype.sort機能を使用し

let sorted = [ 
 
    {Label: "UDP 128B Flood"}, 
 
    {Label: "UDP 512B Flood"}, 
 
    {Label: "UDP 1514B Flood"}, 
 
    {Label: "HTTP Excessive GET"} 
 
].sort((a, b) => a.Label.localeCompare(b.Label)); 
 

 
console.log(sorted);

+0

これは非常に近いですが、「UDP 1514B Flood」は「UDP 512B Flood」の前でソートされています – iamcootis

+0

実際には「UPD 1514B」なのでこれが原因です。編集:私はそれをあなたのためにUDPに変更しましたので、今すぐあなたが期待する順序で並べ替えます – user184994

0

Javascript : natural sort of alphanumerical strings

このスレッドから答えを見つけました。

profiles.sort((as, bs) => { 
var a: any, b: any, a1: number, b1: number, i= 0, n: number , L, 
    rx=/(\.\d+)|(\d+(\.\d+)?)|([^\d.]+)|(\.\D+)|(\.$)/g; 
if(as.Label=== bs.Label) return 0; 
a= as.Label.toLowerCase().match(rx); 
b= bs.Label.toLowerCase().match(rx); 
L= a.length; 
while(i<L){ 
    if(!b[i]) return 1; 
    a1= a[i], 
     b1= b[i++]; 
    if(a1!== b1){ 
     n= a1-b1; 
     if(!isNaN(n)) return n; 
     return a1>b1? 1:-1; 
    } 
} 
return b[i]? -1:0; 

});

関連する問題