Упорядочивать array JSON

Ранее, в этой ссылке я попросил помощь, чтобы делать вид top пользователей, упорядоченных Вашей пунктуацией, используя файл определенного JSON как

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

Со следующим форматом:

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

И он это делал со следующим кодом:

var points = JSON.parse(json);
var points_array = Object.keys(points).map(
  function (clave) {
    var elemento = points[clave];
    elemento.id = clave;
    return elemento;
  }
);
points_array.sort(
  function(a, b) {
    return b.points - a.points;
  }
);

Однако, сейчас я нуждаюсь в том, чтобы упорядочить другой файл JSON, определенного как

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

Со следующим форматом:

{
  "256566731684839428":[
    {"ID":"242043489611808769", "points":617},
    {"ID":"129213229221019648", "points":22},
    {"ID":"190388892799598592", "points":214}
  ]
}

Будучи 256566731684839428 идентификация guild, и каждый блок, идентификация пользователя и Ваша пунктуация.

var lguild = lpoints[msg.guild.id];
if (lguild === undefined) {
  lpoints[msg.guild.id] = []
  var newGuild = lpoints[msg.guild.id];
  newGuild.push({id:msg.author.id, points: 0});
}else{
  var userX = lguild.find( function(element) {
    return element.ID === msg.author.id;
  });
  if(userX === undefined) {
    lguild.push({id:msg.author.id, points: 0});
  }
}

Это код, который обновляет данные, если ты нуждаешься в контексте, и понимать лучше, как функционирует код, хотя объяснена в этом другая ссылка.

То, в чем я нуждаюсь, равно как моя программа сейчас упорядочивает данные о файле ./points.json (он достигает совсем), что упорядочил также данные о файле ./lpoints.json, но только определенного array (msg.guild.id).

Я попробовал делать что-то похожим на код, который я использую, чтобы упорядочивать глобальные данные пользователя (points.json), но не знаю, как упорядочивать объекты внутри array.

Заранее спасибо.

1
задан 13.04.2017, 16:00
1 ответ

cГіdigo - точно тот же самый, sГіlo, что сейчас array, который нужно упорядочивать, lpoints[msg.guild.id].

CГіdigo:

//para simular el JSON obtenido
var jsonObtenido = `{
  "256566731684839428":[
    {"ID":"242043489611808769", "points":617},
    {"ID":"129213229221019648", "points":22},
    {"ID":"190388892799598592", "points":214}
  ]
}`;

//El ID que se quiere ordenar (simulamos lo que usa el autor)
var msg = { guild: { id: "256566731684839428" }}; 

// convertir en objeto
// Esta línea en realidad debería ser: 
//let lpoints = JSON.parse(fs.readFileSync('./lpoints.json', 'utf8'));
var lpoints = JSON.parse(jsonObtenido);

//ordenar (si existe)
if (lpoints[msg.guild.id]) {
    lpoints[msg.guild.id].sort(
        function (a, b) {
            return b.points - a.points;
        }
    );
}

//Mostrar el resultado
console.log(lpoints);
3
ответ дан 24.11.2019, 11:54
  • 1
    ¿ Тогда нужно закрывать вопрос как удвоенная? – ArtEze 07.10.2017, 21:11
  • 2
    @ArtEze не sé. Я верю в то, что está прося aclaració n на có mo интерпретировать этот có я говорю с темой в особенности, что он отличный... Но не имей значения. – Mariano 07.10.2017, 21:14