Ordenar los valores de un archivo JSON

publicado por: Anonymous

Tengo un archivo JSON, y lo que quiero hacer es hacer una función en la que devuelva una lista ordenada limitada por 10 usuarios (si es posible, en un array, pero si eso es complicarse, agradecería su sugerencia).

Estos datos provienen de:

let points = JSON.parse(fs.readFileSync('./points.json', 'utf8'));

En la cual accedo a los datos de cada uno con la siguiente línea:

let userData = points[msg.author.id];

El archivo JSON tiene el siguiente formato.

{
  "242043489611808769":{"points":617,"level":4,"time":1482316617392},
  "129213229221019648":{"points":22,"level":0,"time":1482316617609},
  "190388892799598592":{"points":214,"level":2,"time":1482316612355}
}

De momento, lo que tengo es un programa que lo que hace es que añade puntos a los usuarios (y conforme alcancen ‘x’ puntos, suben de nivel automáticamente), pero ahora necesito hacer una lista del “top 10 usuarios más activos”.

Lo que necesito es que al ordenar, devuelva la ID (en el primer caso sería 242043489611808769), que es lo que necesito para poder procesar los datos.

Trabajo con NodeJS, gracias por adelantado.

solución

Puedes usar el siguiente código para ordenar los datos y obtener el más alto:

_x000D_

_x000D_

/* Los datos que has proporcionado en el ejemplo */_x000D_
var json = '{_x000D_
  "242043489611808769": {_x000D_
    "points": 617,_x000D_
    "level":4,_x000D_
    "time":1482316617392_x000D_
  },_x000D_
  "129213229221019648": {_x000D_
    "points": 22,_x000D_
    "level":0,_x000D_
    "time":1482316617609_x000D_
  },_x000D_
  "190388892799598592": {_x000D_
    "points":214,_x000D_
    "level":2,_x000D_
    "time":1482316612355_x000D_
  }_x000D_
}';_x000D_
/* Tratamos los datos */_x000D_
var points = JSON.parse(json);_x000D_
/* Los convertimos en un array añadiendo el "id" a los campos */_x000D_
var points_array = Object.keys(points).map(_x000D_
  function (clave) {_x000D_
    var elemento = points[clave];_x000D_
    elemento.id = clave;_x000D_
    return elemento;_x000D_
  }_x000D_
);_x000D_
/* Los ordenamos comparando los puntos (points) */_x000D_
points_array.sort(_x000D_
  function(a, b) {_x000D_
    return b.points - a.points;_x000D_
  }_x000D_
);_x000D_
/* Obtenemos el primer elemento (el mayor) */_x000D_
console.log(points_array[0]);_x000D_
console.log(points_array[0].id);

_x000D_

_x000D_

_x000D_

Espero que te sea de utilidad.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *