如何在javascript中按角色对用户进行排序?

如何在javascript中按角色对用户进行排序?,javascript,node.js,meteor,Javascript,Node.js,Meteor,我正在运行开发者版本的Rocket聊天系统,我需要按角色对用户进行排序,以将管理员/所有者/版主等顶级用户保持在顶级列表中,而不是按在线状态,因为默认排序是 // show online users first. // sortBy is stable, so we can do this users = _.sortBy(users, u => u.status == null); 我需要将此代码更改为按角色级别排序 下面是users.json中用户数据的示例

我正在运行开发者版本的Rocket聊天系统,我需要按角色对用户进行排序,以将管理员/所有者/版主等顶级用户保持在顶级列表中,而不是按在线状态,因为默认排序是

    // 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"
]
在这个屏幕截图中,红色的用户是管理员,黑色的用户是成员,我需要将管理员移到顶部

通常,通过提供比较器功能来处理排序。此函数仅获取两个对象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);
排序方法的作用是一次遍历一个索引数组,并应用您提供的比较器函数。它将当前索引参数a与下一个参数b进行比较。如果返回1,则a更大。如果为-1,则更少。如果为0,则它们相等


这不是javascript所独有的,而是许多语言处理排序/比较的方式。

您必须定义您希望如何按角色排序,例如为角色赋值以便进行比较。我不擅长nodejs,但这行用户=uu.sortByusers,u=>u.status==null;列出我的在线状态的用户,我需要将其更改为按顶级排序,以将管理员保持在顶级列表中。您可以使用Array.prototype.sort方法。你可以定义你喜欢的任何类型的比较。勾选这个,它可能会给你一个线索。。。