我有一个对象数组,对象的定义如下所示:
export class AccountInfo {
accountUid: string;
userType: string;
firstName: string;
middleName: string;
lastName: string;
}
注意:我没有将userType作为枚举的原因是因为该对象是由数据库调用填充的,我无法找到一种干净的方法让数据库返回的字符串填充枚举的
我想对数组进行排序,以便首先显示userType为“STAFF”的对象,然后是“TEACHER”,然后是“PARENT”,然后是“STUDENT”。
答案 0 :(得分:7)
您可以将订单存储在array
中,然后只需将indexOf
与sort
一起使用即可实现目标。请参阅下面的代码示例:
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);