Así que tengo esta matriz de objetos
[ { '1485958472927784961': { name: 'bruno fiverr', points: 6, user_id: '1485958472927784961', tweets: [Array] }, '1414575563323420679': { name: 'ju', points: 7, user_id: '1414575563323420679', tweets: [Array] } } ]y me gustaría ordenar esta matriz por la cantidad de puntos que tiene el usuario. Estoy tratando de hacerlo funcionar usando array.sort con la siguiente función:
var top10 = array.sort(function(a, b) { return a.points > b.points ? 1 : -1; }).slice(0, 10);pero todo lo que obtengo es la misma matriz desde el principio. ¿es eso posible?
Tiene una matriz con un solo objeto cuyos valores desea ordenar por una propiedad. Para eso querrás:
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);La matriz más externa es inútil aquí. Cambiaría su estructura de datos a un objeto con valores-clave:
const data = { '1485958472927784961': { name: 'bruno fiverr', points: 6, user_id: '1485958472927784961', tweets: [], }, '1414575563323420679': { name: 'ju', points: 7, user_id: '1414575563323420679', tweets: [], }, };A partir de esto, puede obtener todos los valores que se convierten en una matriz de los objetos, luego ejecutar una ordenación en eso.
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)