0

If I have an array of objects all have a number in, how can I get a new array with the 3 highest numbers?

const exampleArray = [{
    "name": "Tim",
    "score": 76
},
{
    "name": "Lucy",
    "score": 23
},
{
    "name": "Jeremy",
    "score": 44
},
{
    "name": "Burns",
    "score": 66
},
{
    "name": "Mike",
    "score": 86
}
]

Expected return - where I have the highest scores.

let returnedArray = [{
    "name": "Tim",
    "score": 76
},
{
    "name": "Burns",
    "score": 66
},
{
    "name": "Mike",
    "score": 86
}
]
1467
  • 1
  • 2

1 Answers1

2

You could get all scores, sort descending get top wanted values and filter the array.

const
    array = [{ name: "Tim", score: 76 }, { name: "Lucy", score: 23 }, { name: "Jeremy", score: 44 }, { name: "Burns", score: 66 }, { name: "Mike", score: 86 }],
    values = array
        .map(({ score }) => score)
        .sort((a, b) => b - a)
        .slice(0, 3),
    top3 = array.filter(({ score }) => values.includes(score));

console.log(top3);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392