2017-12-05 3 views
0

Ich bin ziemlich neu in Angular, vielleicht bin ich nur auf der Suche nach dem Falschen, aber ich kann nicht scheinen, eine einfache Antwort zu diesem überall zu finden.Angular natürliche Art Array von Objekten

Lassen Sie uns sagen, ich habe ein Array von Objekten:

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

Dies wird Array als die Optionen in einer Dropdown angezeigt wird:

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

Ich möchte diese Objekte sortieren sie, um sicherzustellen, erscheinen in alphanumerischer Reihenfolge.

Antwort

0

Verwenden Sie die array.prototype.sort Funktion

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

Dies ist sehr nahe, aber "UDP 1514B Flood" ist vor "UDP 512B Flood" – iamcootis

+0

sortiert Das ist, weil es tatsächlich "UPD 1514B" ist. Bearbeiten: Ich habe es für Sie in UDP geändert, so dass es jetzt in der Reihenfolge sortiert, die Sie erwarten würden – user184994

0

Javascript : natural sort of alphanumerical strings

die Antwort aus diesem Thread gefunden.

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; 

});

Verwandte Themen