按委员会,然后按用户角色对数组进行排序

时间:2018-07-29 03:56:41

标签: javascript arrays sorting

我有一个包含类似于以下数据的数组:

var committees = [
  {
    committee: "Apple Com",
    userRole: "Member",
    membersNum: 11
  },
    {
    committee: "Orange Com",
    userRole: "Member",
    membersNum: 9
  },    {
    committee: "Banana Com",
    userRole: "",
    membersNum: 13
  },    {
    committee: "Strawberry Com",
    userRole: "Vice President",
    membersNum: 15
  },    {
    committee: "Lemon Com",
    userRole: "",
    membersNum: 13
  },
  {
    committee: "Mango Com",
    userRole: "Chair",
    membersNum: 11
  },
]

我希望它们首先按用户角色排序,然后再按委员会排序。 委员会字段将始终具有一个值,而用户角色字段有时将为

当前,我为实现此目的正在将数组分成两个数组。第一个数组将仅返回用户角色不是 的项目。第二个数组返回用户角色 的项目。接下来,我依次按委员会对每个数组进行排序,然后将它们连接起来。因此逻辑如下:

  //get committees user is member of and committees user is not member of
  var memberOf = [];
  var nonMemberOf = [];
  for(var i=0; i<committees.length; i++){
    if(committees[i].userRole){
      memberOf.push(committees[i]);
    } else {
      nonMemberOf.push(committees[i]);
    }
  }  
  memberOf.sort(function(a,b){return (a.committee > b.committee) ? 1 : -1; });
  nonMemberOf.sort(function(a,b){return (a.committee > b.committee) ? 1 : -1; });

  var allComs = memberOf.concat(nonMemberOf);

我已经花了3个多小时来阅读并尝试实现我在此处的某些帖子中所阅读的内容:

我相信,有一种更好的方式可以做我正在做的事情,但无法弄清楚。如果有人可以在这里说些什么,我将非常感激。

P.S。我不是要有人为我做这件事,我想了解如何做。对于那些可以帮助的人,请先感谢!

1 个答案:

答案 0 :(得分:1)

尝试sort来比较每个比较项的userRole之间的布尔值差异,或者通过0得出(即,如果两者都起作用或都没有)角色),然后按他们的committee排序:

var committees=[{committee:"Apple Com",userRole:"Member",membersNum:11},{committee:"Orange Com",userRole:"Member",membersNum:9},{committee:"Banana Com",userRole:"",membersNum:13},{committee:"Strawberry Com",userRole:"Vice President",membersNum:15},{committee:"Lemon Com",userRole:"",membersNum:13},{committee:"Mango Com",userRole:"Chair",membersNum:11},]

committees.sort((a, b) => (
  Boolean(b.userRole) - Boolean(a.userRole)
  || a.committee.localeCompare(b.committee)
));
console.log(committees);