首页 > 解决方案 > 如何同时使用多个键对对象数组进行排序?

问题描述

我有一个对象数组,每个对象都有和name键。它看起来像这样:skilltalent

 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},
]

如您所见,如果某人的技能相同(例如 forperson1person7中的defaultArray),那么将按人排序talent


有人可以帮我制作一个简洁的函数,将defaultArray其作为参数并返回resultArray考虑到skillandtalent值可以是完全随机的吗?

标签: javascriptarrayssorting

解决方案


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


推荐阅读