按状态排序的打字稿列表(字符串值)

iJa*_*ava 2 typescript lodash angular

我需要按状态对项目列表进行排序,但我不确定应该采用哪种方法,它是创建比较器还是某种排序技术?lodash 会在这里工作吗?

示例输入列表:

[
{id: 1, name: "name1", status: "Failed"},
{id: 2, name: "name2", status: "Success"},
{id: 3, name: "name3", status: "In progress"},
{id: 4, name: "name4", status: "Reserved"},
{id: 5, name: "name5", status: "Pending"}
]
Run Code Online (Sandbox Code Playgroud)

示例排序列表(输出)排序为失败 -> 进行中 -> 保留 -> 待定 -> 成功

[
{id: 1, name: "name1", status: "Failed"},
{id: 3, name: "name3", status: "In progress"},
{id: 4, name: "name4", status: "Reserved"},
{id: 5, name: "name5", status: "Pending"}
{id: 2, name: "name2", status: "Success"},
]
Run Code Online (Sandbox Code Playgroud)

我使用的堆栈是 Angular + Typescript。

编辑:列表有点大,通常约 15k 行。

Lay*_*era 7

您可以根据其他数组中的值对数组进行排序:

let sortOrder = ['Failed', 'In progress', 'Reserved', 'Pending', 'Success'];
let array = [
    { id: 1, name: "name1", status: "Failed" },
    { id: 2, name: "name2", status: "Success" },
    { id: 3, name: "name3", status: "In progress" },
    { id: 4, name: "name4", status: "Reserved" },
    { id: 5, name: "name5", status: "Pending" }
];

array.sort((a, b) => {
    return sortOrder.indexOf(a.status) - sortOrder.indexOf(b.status);
});

console.log(array);
Run Code Online (Sandbox Code Playgroud)