I have an array of objects and I want to find the five biggest numbers in object values and to push these five objects to the new array, but also remove them from the first array. I've tried using for loop combined with push and splice methods, but the result is kind of weird. Here is an example of what I've tried
const arrOfObjs = [
{number: 1, bla: 'sadsad'},
{number: 2, bla: 'sadsad'},
{number: 3, bla: 'sadsad'},
{number: 9, bla: 'sadsad'},
{number: 4, bla: 'sadsad'},
{number: 10, bla: 'sadsad'},
{number: 5, bla: 'sadsad'},
{number: 6, bla: 'sadsad'},
{number: 7, bla: 'sadsad'},
{number: 8, bla: 'sadsad'},
]
let largestNumbers = [];
for(var i=0; i<5; i++) {
largestNumbers.push(
arrOfObjs.splice(
arrOfObjs.indexOf(
Math.max.apply(
Math,arrOfObjs.map(function(o){
return o.number;
})
)
), 1)[0])
}
console.log(largestNumbers)
Everything seems to be working instead of the final result, which should be
[{
bla: "sadsad",
number: 8
}, {
bla: "sadsad",
number: 7
}, {
bla: "sadsad",
number: 6
}, {
bla: "sadsad",
number: 9
}, {
bla: "sadsad",
number: 10
}]
I'm not sure why number 9 isn't returned, and why the number 5 is. What am I doing wrong? Thanks in advance!
arrOfObjs.sort((a, b) => b.number - a.number).slice(0, 5)