基于TypeScript中的字符串值属性对对象进行排序

时间:2017-04-22 21:26:41

标签: javascript node.js typescript enums

我有一个对象数组,对象的定义如下所示:

export class AccountInfo {
  accountUid: string;
  userType: string;
  firstName: string;
  middleName: string;
  lastName: string;
}

注意:我没有将userType作为枚举的原因是因为该对象是由数据库调用填充的,我无法找到一种干净的方法让数据库返回的字符串填充枚举

我想对数组进行排序,以便首先显示userType为“STAFF”的对象,然后是“TEACHER”,然后是“PARENT”,然后是“STUDENT”。

2 个答案:

答案 0 :(得分:7)

您可以将订单存储在array中,然后只需将indexOfsort一起使用即可实现目标。请参阅下面的代码示例:

const humans = [{
  accountUid: "1",
  userType: "TEACHER",
}, {
  accountUid: "2",
  userType: "STAFF",
}, {
  accountUid: "3",
  userType: "STUDENT",
}, {
  accountUid: "4",
  userType: "PARENT",
}];

const order = ['STAFF', 'TEACHER', 'PARENT', 'STUDENT'];

const result = humans.sort((a, b) => order.indexOf(a.userType) > order.indexOf(b.userType));

console.log(result)

如果您不能使用ES6,请使用:

humans.sort(function(a, b){
    return order.indexOf(a.userType) > order.indexOf(b.userType);
});

答案 1 :(得分:0)

这是另一种方法,可能有一个订单对象来存储订单

const actionOrder = {
    "EAT" : 1,
    "SLEEP" : 2,
    "PLAY" : 3,
} as const;

const users = [{
    name: "Mike",
    action: "PLAY"
}, {
    name: "John",
    action: "EAT"
}, {
    name: "Harry",
    action: "SLEEP"
}
];

users.sort((a,b) => {
    return actionOrder[a.action] - actionOrder[b.action];
});

console.log(users);