我在开发人员版本中运行Rocket Chat系统,我需要按角色对用户进行排序,以保持顶级列表中的最高级别(admin / owner / moderator),而不是在线状态,因为默认排序为< / p>
// show online users first.
// sortBy is stable, so we can do this
users = _.sortBy(users, u => u.status == null);
我需要更改此代码以按角色级别排序 这个例子用于users.json中的用户数据
"type" : "user",
"status" : "offline",
"active" : true,
"name" : "Super",
"_updatedAt" : ISODate("2017-05-16T15:10:30.559+0000"),
"roles" : [
"admin"
]
在此屏幕截图中,使用红色的用户是admin,黑色是会员,我需要将管理员移到顶部 enter image description here
答案 0 :(得分:0)
通常,通过提供比较器功能来处理排序。此函数只需要两个对象A和B,并确定它们的相对位置。您作为程序员决定用于确定排序的逻辑。
以下是基于您的描述的示例。
const roleComparer = (a, b) => {
if (a.roles.includes('admin') && !b.roles.includes('admin')) {
return 1;
}
else if (b.roles.includes('admin') && !a.roles.includes('admin')) {
return -1;
}
else {
return 0;
}
};
要进行排序,只需将其作为参数传递给Array.prototype.sort()方法:
users = users.sort(roleComparer);
sort()方法的作用是一次遍历数组一个索引,并应用您提供的比较器函数。它将当前索引(参数a)与下一个索引(参数b)进行比较。如果它返回1,则a更大。如果-1,则更少。如果为0,则它们是相等的。
这不是javascript独有的,而是如何以多种语言处理排序/比较。