按属性值打字稿对对象数组排序

时间:2020-04-22 19:52:03

标签: javascript angular typescript

I am attaching output how i need我有下面的对象列表,

const list = [{
  "ID": "3",
  "Status": "NEW"
},
{
  "ID": "1",
  "Status": "Open",
},
{
  "ID": "9",
  "Status": "NEW",
},
{
  "ID": "5",
  "Status": "NEW",
},
{
  "ID": "0",
  "Status": "Closed",
},
{
  "ID": "6",
  "Status": "Closed",
}];

我想按状态..根据下拉选择进行排序。下拉数组包含[新建,关闭,打开]。如果我选择“新建”,则“状态”为“新建”应位于列表的顶部,对于“打开”也是如此。

我尝试了列表排序,如下所示,其给出的升序和降序不是我想要的。

list.sort(
  function(a, b) {
    return a.Status < b.Status ? -1 : a.Status > b.Status ? 1 : 0;
});

请提出建议,如何传递属性值。 预先谢谢你。

2 个答案:

答案 0 :(得分:0)

您可能正在寻找

const order = ["NEW", "Closed", "Open"];
list.sort(function(a, b) {
    return order.indexOf(a.Status) - order.indexOf(b.Status);
});

(这仅在所有.Status值都出现在order数组中的前提下起作用)

答案 1 :(得分:0)

也许您可以使用过滤器来显示所有包含NEW或Open的列表值

const list = [{
  "ID": "3",
  "Status": "NEW"
},
{
  "ID": "1",
  "Status": "Open",
},
{
  "ID": "9",
  "Status": "NEW",
},
{
  "ID": "5",
  "Status": "NEW",
},
{
  "ID": "0",
  "Status": "Closed",
},
{
  "ID": "6",
  "Status": "Closed",
}];

const ans = list.filter(e => e.Status === 'NEW');
console.log(ans);