代码之家  ›  专栏  ›  技术社区  ›  Morfinismo

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

  •  1
  • Morfinismo  · 技术社区  · 6 年前

    我有一个数组,其中包含与此类似的数据:

    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个多小时阅读并尝试实现我在这里的一些帖子上看到的内容:

    我相信有更好的方法来做我正在做的事情,但我就是想不出来。如果有人能在这里发光,我会非常感激的。

    另外,我不是要别人帮我做这件事,我想知道怎么做。对于能帮忙的人,提前谢谢!

    1 回复  |  直到 6 年前
        1
  •  1
  •   CertainPerformance    6 年前

    尝试 sort 根据每个比较项之间的布尔差异 userRole 或者如果结果是 0 (也就是说,如果两者都有一个角色或都没有角色),则按它们的 committee S:

    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);