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?
2 Answers 2
You have an array with a single object whose values you want to sort by a property. For that you'll want to:
- Access the first object in the outer array with 
array[0] - Extract the values of the object as an array with 
Object.values - Sort the values in descending order with the sort function 
(a,b) => b.points - a.points - Obtain your 10 elements with 
.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);
Comments
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)
.slice(0, 10`). That must be a copying error or you'd get a syntax error..slice(0, 10);Object.values(array[0]).sort...