我如何按javascript中的角色排序用户?

时间:2017-05-18 13:37:25

标签: javascript node.js meteor

我在开发人员版本中运行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

1 个答案:

答案 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独有的,而是如何以多种语言处理排序/比较。