首页 > 解决方案 > 有条件地按两个属性排序

问题描述

考虑以下场景,我必须按姓名和分数对学生列表进行排序。

[
 {
  name: 'Max',
  score: 94
 },
 {
  name: 'Jerome',
  score: 86
 },
 {
  name: 'Susan',
  score: 86
 },
 {
  name: 'Abel',
  score: 86
 },
 {
  name: 'Kevin',
  score: 86
 }
]

我想按得分最高的学生对列表进行排序,但是如果两个或多个学生的分数相同,那么我想按字母顺序对这些学生进行排序。对于上述情况,结果应如下所示:

[
 {
  name: 'Max',
  score: 94
 },
 {
  name: 'Abel',
  score: 86
 },
 {
  name: 'Jerome',
  score: 86
 },
 {
  name: 'Kevin',
  score: 86
 },
 {
  name: 'Susan',
  score: 86
 }
]

我怎样才能做到这一点?我可以使用任何 lodash 函数,还是可以使用纯 JavaScript?

标签: javascriptarraysunderscore.jslodash

解决方案


不需要库,只需比较scores,如果结果为 0,则比较名称:

const arr=[{name:'Max',score:94},{name:'Jerome',score:86},{name:'Susan',score:86},{name:'Abel',score:86},{name:'Kevin',score:86}]

console.log(
  arr.sort((a, b) => b.score - a.score || a.name.localeCompare(b.name))
);


推荐阅读