javascript - 如何同时使用多个键对对象数组进行排序?
问题描述
我有一个对象数组,每个对象都有和name
键。它看起来像这样:skill
talent
let defaultArray = [
{name='person1', skill = 6, talent = 3},
{name='person2', skill = 5, talent = 5},
{name='person3', skill = 4, talent = 6},
{name='person4', skill = 2, talent = 7},
{name='person5', skill = 1, talent = 4},
{name='person6', skill = 3, talent = 1},
{name='person7', skill = 6, talent = 2}
]
我需要对其进行排序,以便我只拥有由他们的技能定义的三个最佳人的数组,如下所示:
let resultArray = [
{name='person1', skill = 6, talent = 3},
{name='person7', skill = 6, talent = 2},
{name='person2', skill = 5, talent = 5},
]
如您所见,如果某人的技能相同(例如 forperson1
和person7
中的defaultArray
),那么将按人排序talent
。
有人可以帮我制作一个简洁的函数,将defaultArray
其作为参数并返回resultArray
考虑到skill
andtalent
值可以是完全随机的吗?
解决方案
const arr = [
{name:'person1', skill : 6, talent : 3},
{name:'person2', skill : 5, talent : 5},
{name:'person3', skill : 4, talent : 6},
{name:'person4', skill : 2, talent : 7},
{name:'person5', skill : 1, talent : 4},
{name:'person6', skill : 3, talent : 1},
{name:'person7', skill : 6, talent : 2}
];
arr.sort((a, b) => (b.skill - a.skill) || (b.talent - a.talent));
console.log(arr)
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- angular - fuse.js 与 Angular 一起使用时返回一个空数组
- swift - 无法加载 Stripe 的 pushPaymentOptionsViewController
- c++ - 编译器无法识别友元函数
- algorithm - 叠加演算和方程排序
- flask - 使用 AWS DocumentDB 烧瓶
- python - 与让 EC2 实例 24/7 循环运行相比,是否建议使用 lambda 函数?
- c++ - 放松排序作为一个信号
- gradle - Gradle 任务语法:如何从 Groovy 的角度进行解释?
- django - 如何通过登录用户从模板数据中保存模型中的查询集?
- javascript - 在花括号内连接字符串和变量