JavaScript-如何按在线人员对数组中的对象进行排序,然后按其权限排序,然后按名称的字母顺序排序?

JavaScript-如何按在线人员对数组中的对象进行排序,然后按其权限排序,然后按名称的字母顺序排序?,javascript,Javascript,嘿,我正在尝试为JSON中的朋友呈现restapi。我已经在一个数组中找到了来自数据库的朋友,但我需要对他们进行排序,以获得更好的感觉。例如,数组如下所示: const friends = [ { "id": 1, "name": "Hellbyte", "rank": "founder", "online": true }, { "id": 3, "name": "Tess", "rank": "user", "onl

嘿,我正在尝试为JSON中的朋友呈现restapi。我已经在一个数组中找到了来自数据库的朋友,但我需要对他们进行排序,以获得更好的感觉。例如,数组如下所示:

const friends = [
  {
    "id": 1,
    "name": "Hellbyte",
    "rank": "founder",
    "online": true
  },
  {
    "id": 3,
    "name": "Tess",
    "rank": "user",
    "online": false
  },
  {
    "id": 9,
    "name": "Katey",
    "rank": "admin",
    "online": true
  },
  {
    "id": 5,
    "name": "John",
    "rank": "globalmoderator",
    "online": false
  },
  {
    "id": 10,
    "name": "Andre",
    "rank": "admin",
    "online": true
  },
  {
    "id": 19,
    "name": "Xyz",
    "rank": "user",
    "online": true
  },
  {
    "id": 17,
    "name": "Nate",
    "rank": "premium",
    "online": false
  },
  {
    "id": 25,
    "name": "Berry",
    "rank": "premium",
    "online": false
  }
]
const friends = [
  {
    "id": 1,
    "name": "Hellbyte",
    "rank": "founder",
    "online": true
  },
  {
    "id": 10,
    "name": "Andre",
    "rank": "admin",
    "online": true
  },
  {
    "id": 9,
    "name": "Katey",
    "rank": "admin",
    "online": true
  },
  {
    "id": 19,
    "name": "Xyz",
    "rank": "user",
    "online": true
  },
  {
    "id": 5,
    "name": "John",
    "rank": "globalmoderator",
    "online": false
  },
  {
    "id": 25,
    "name": "Berry",
    "rank": "premium",
    "online": false
  },
  {
    "id": 17,
    "name": "Nate",
    "rank": "premium",
    "online": false
  },
  {
    "id": 3,
    "name": "Tess",
    "rank": "user",
    "online": false
  }
]
我需要根据这些条件对它们进行排序:

  • 在线是真的
    • 排名顺序如下:创始人、管理员、globalmoderator、高级用户、用户
    • 按姓名字母顺序
  • 在线是假的
    • 排名顺序如下:创始人、管理员、globalmoderator、高级用户、用户
    • 按姓名字母顺序
现在看起来应该是:

const friends = [
  {
    "id": 1,
    "name": "Hellbyte",
    "rank": "founder",
    "online": true
  },
  {
    "id": 3,
    "name": "Tess",
    "rank": "user",
    "online": false
  },
  {
    "id": 9,
    "name": "Katey",
    "rank": "admin",
    "online": true
  },
  {
    "id": 5,
    "name": "John",
    "rank": "globalmoderator",
    "online": false
  },
  {
    "id": 10,
    "name": "Andre",
    "rank": "admin",
    "online": true
  },
  {
    "id": 19,
    "name": "Xyz",
    "rank": "user",
    "online": true
  },
  {
    "id": 17,
    "name": "Nate",
    "rank": "premium",
    "online": false
  },
  {
    "id": 25,
    "name": "Berry",
    "rank": "premium",
    "online": false
  }
]
const friends = [
  {
    "id": 1,
    "name": "Hellbyte",
    "rank": "founder",
    "online": true
  },
  {
    "id": 10,
    "name": "Andre",
    "rank": "admin",
    "online": true
  },
  {
    "id": 9,
    "name": "Katey",
    "rank": "admin",
    "online": true
  },
  {
    "id": 19,
    "name": "Xyz",
    "rank": "user",
    "online": true
  },
  {
    "id": 5,
    "name": "John",
    "rank": "globalmoderator",
    "online": false
  },
  {
    "id": 25,
    "name": "Berry",
    "rank": "premium",
    "online": false
  },
  {
    "id": 17,
    "name": "Nate",
    "rank": "premium",
    "online": false
  },
  {
    "id": 3,
    "name": "Tess",
    "rank": "user",
    "online": false
  }
]
我怎么能这样分类呢?请让我知道怎么做。谢谢。

您可以使用
数组#排序
并传递自定义比较器,根据
联机
状态比较
朋友
,然后是
排名
顺序,最后是按
名称
进行词典排序

const friends=[{“id”:1,“name”:“Hellbyte”,“rank”:“founder”,“online”:true},{“id”:3,“name”:“Tess”,“rank”:“user”,“online”:false},{“id”:9,“name”:“Katey”,“rank”:“admin”,“online”:true},{“id”:5,“name”:“John”,“rank”:“globalmoderator”,“online”:false},{“id”:10,“name”:“ander”,“rank”:“admin”,“online”:true},{“id”:19,“name”:“Xyz”,“rank”:“user”,“online”:true},{“id”:17,“name”:“Nate”,“rank”:“premium”,“online”:false},{“id”:25,“name”:“Berry”,“rank”:“premium”,“online”:false},
排名=[“创始人”、“管理员”、“globalmoderator”、“高级”、“用户”];
排序((a,b)=>b.online-a.online | | ranks.indexOf(a.rank)-ranks.indexOf(b.rank)| | a.name.localeCompare(b.name));

console.log(朋友)
您可以获取各种联机状态的对象,并按顺序排列,首先按
联机
,然后按
排序
,最后按
名称
排序

这种方法允许对列组进行不同的排序顺序,独立于联机状态

var rank={true:{founder:1,admin:2,globalmoderator:3,premium:4,user:5},false:{founder:1,admin:2,globalmoderator:3,premium:4,user:5},
数据=[{id:1,名称:“Hellbyte”,排名:“创始人”,在线:真},{id:3,名称:“苔丝”,排名:“用户”,在线:假},{id:9,名称:“凯蒂”,排名:“管理员”,在线:真},{id:5,名称:“约翰”,排名:“全球模仿者”,在线:假},{id:10,名称:“安德烈”,排名:“管理员”,在线:真},{id:19,名称:“Xyz”,排名:“用户”,在线:真},{id:17,姓名:“Nate”,排名:“premium”,在线:false},{id:25,姓名:“Berry”,排名:“premium”,在线:false}];
数据排序((a,b)=>
b、 在线||
排名[a.online][a.rank]-排名[b.online][b.rank]||
a、 name.localeCompare(b.name)
);
console.log(数据)

。作为控制台包装{max height:100%!important;top:0;}
请共享您尝试过的代码。我没有任何代码,我不知道如何编写好排序函数来完成我需要的工作。