javascript - 有条件地按两个属性排序
问题描述
考虑以下场景,我必须按姓名和分数对学生列表进行排序。
[
{
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?
解决方案
不需要库,只需比较score
s,如果结果为 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))
);
推荐阅读
- mysql - MySQL 关系中的 Loopback 4 和约束
- django - Django 模板意外遗漏了 Elasticsearch 的结果
- react-native - 在 Redux 的操作中,使用回调调用函数(使用 async/await 和 React-Native-Contacts)
- wolfram-language - 绘制函数时显示的空白图
- python-3.x - 如何从 pythoncom 为 Windows 10 任务调度程序编辑任务设置
- javascript - 如何订购数组中的项目?
- javascript - JavaScript/jQuery 签名板
- environment-variables - Apache check if user is browsing their home directory
- hbase - Geomesa BBOX Query is not returning all results
- php - How to apply a session value to drop down list using blade in Laravel