Reputation: 137
So I have this array of objects
[
{
'1485958472927784961': {
name: 'bruno fiverr',
points: 6,
user_id: '1485958472927784961',
tweets: [Array]
},
'1414575563323420679': {
name: 'ju',
points: 7,
user_id: '1414575563323420679',
tweets: [Array]
}
}
]
and I would like to sort this array by the number of points the user has. I am trying to get it working using array.sort with the following function:
var top10 = array.sort(function(a, b) { return a.points > b.points ? 1 : -1; }).slice(0, 10);
but all I get is the same array from start. is that possible?
Upvotes: 2
Views: 6708
Reputation: 4194
You have an array with a single object whose values you want to sort by a property. For that you'll want to:
array[0]
Object.values
(a,b) => b.points - a.points
.slice(0,10)
const array = [
{
'1485958472927784961': {
name: 'bruno fiverr',
points: 6,
user_id: '1485958472927784961',
tweets: [Array]
},
'1414575563323420679': {
name: 'ju',
points: 7,
user_id: '1414575563323420679',
tweets: [Array]
}
}
];
const top10 = Object.values(array[0]).sort((a,b) => b.points - a.points).slice(0,10);
console.log(top10);
Upvotes: 2
Reputation: 5005
The outermost array is useless here. I would change your data structure to an object with key-values:
const data = {
'1485958472927784961': {
name: 'bruno fiverr',
points: 6,
user_id: '1485958472927784961',
tweets: [],
},
'1414575563323420679': {
name: 'ju',
points: 7,
user_id: '1414575563323420679',
tweets: [],
},
};
From this you can just get all the values which becomes an array of the objects, then run a sort on that.
const data = {
'1485958472927784961': {
name: 'bruno fiverr',
points: 6,
user_id: '1485958472927784961',
tweets: []
},
'1414575563323420679': {
name: 'ju',
points: 7,
user_id: '1414575563323420679',
tweets: []
}
}
const sorted = Object.values(data).sort(function(a, b) {
return a.points > b.points ? 1 : -1;
}).slice(0, 10);
console.log(sorted)
Upvotes: 1