打字稿中的自定义排序

时间:2018-10-25 17:00:06

标签: typescript sorting

说我有数组

products= [{
"Name":'xyz',
'ID': 1
},
{
"Name":'abc',
'ID': 5
},
{
"Name":'def',
'ID': 3
}
]

sortOrder=[3,1,5]

如果我愿意,

sortOrder.forEach((item) => {
        products.sort((productA) => {
          if (productA.ID=== item) { return 1; } else { return -1; }
        });
      });

它不是按照sortOrder中指定的顺序排序。我想对sortOrder数组中提到的基于产品数组的sortOrder进行排序。因此,上述的输出应为{ "Name":'def', 'ID': 3 },{ "Name":'xyz', 'ID': 1 },{ "Name":'abc', 'ID': 5 }

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

更新答案以说明产品列表中的重复值。

import { Component } from '@angular/core';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
  name = 'Angular';

  products= [{
"Name":'xyz',
'ID': 1
},
{
"Name":'abc',
'ID': 5
},
{
"Name":'def',
'ID': 3
},{
"Name":'xyz',
'ID': 1
},
{
"Name":'abc',
'ID': 5
},
{
"Name":'def',
'ID': 3
},
{
"Name":'def',
'ID': 3
},
{
"Name":'def',
'ID': 3
}
]

sortOrder=[3,1,5];

sortProducts(){
  var tempSortedProducts :any[]=[];

  for(let idx=0; idx<this.sortOrder.length; idx++){

      this.products.forEach((product)=>{
        if(product.ID===this.sortOrder[idx]){
            tempSortedProducts.push(product)
        } 
      })
  }
  this.products = tempSortedProducts;
}
}

Stackbliz链接:Custom Sort