角度自然排序对象数组

时间:2017-12-05 20:23:54

标签: angular typescript angular5 natural-sort

我对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>

我想对这些对象进行排序,以确保它们以字母数字顺序显示。

3 个答案:

答案 0 :(得分:1)

使用array.prototype.sort功能

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 1 :(得分: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;

});

答案 2 :(得分:0)

  

尝试一下,希望对您有所帮助。

var array=[
  {Label: "UDP 128B Flood", ...},
  {Label: "UDP 512B Flood", ...},
  {Label: "UPD 1514B Flood",...},
  {Label: "HTTP Excessive GET",...} 
]
array.sort(this.sortArray);
sortArray(){ if(b.Label.toString().toLowerCase() <a.Label.toString().toLowerCase()) { return -1; }
if(b.Label.toString().toLowerCase() >a.Label.toString().toLowerCase()) { return 1; } }