Как я могу получать положение объекта json?

Моя программа загружает файл json, это читает и это пишет, но кроме того, у него есть функция, он приказывает их из-за количества точек. Предыдущий шаг, который я сделал в моей программе, здесь.

Данные, которых нужно обрабатывать, происходят:

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

Формат файла ./points.json это следующий:

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

И в конце концов, данные упорядочены так же как количество точек, через следующий блок кода:

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;
  }
);

С которой, points_array[0].id он возвратил бы она пойдите пользователя с большей стоимостью points. Однако, я нуждаюсь в том, чтобы знать, как я могу получать положение пользователя, упорядоченное в зависимости от поля points начиная с поля пойдите, а именно, я хочу, например, искать положение, которое есть у пользователя 190388892799598592, которая была бы должна возвращать 1 (617> 214>, 22).

Я попытался с несколькими кодами, но не смог способствовать тому, чтобы он возвратил другую вещь, чем-1 (not found). Один из них - следующий:

points_array.find(
  function(a) {
    return a.id == msg.author.id;
  }
);

Но возврати-1...

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

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

Ты можешь делать это большими формами. Если поиски спорадические (единственный раз), лучше осуществлять функцию, которая пробегала бы массив до того, чтобы находить твоего идентификатора. Если ты сделаешь много поисков (ты будешь показывать положение нескольких идентификаторов) тогда, лучшее состоит в том, чтобы хранить положения в ассоциативном массиве:

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

/* Creamos una función que haga el trabajo */
function encontrar_id(array, elemento) {
  for (i = 0; i < array.length; i++) {
    if (array[i].id == elemento) {
      return i + 1;
    }
  }
  return undefined;
}

/* Hacemos uso de la función */
console.log("Posición de '129213229221019648': " +
  encontrar_id(points_array, "129213229221019648")
);
console.log("Posición de '242043489611808769': " +
  encontrar_id(points_array, "242043489611808769")
);
console.log("Posición de '190388892799598592': " +
  encontrar_id(points_array, "190388892799598592")
);
console.log("Posición de '290388892799598592': " +
  encontrar_id(points_array, "290388892799598592")
);

/* Creamos una matriz asociativa id -> posicion */
posiciones = {};
for (i = 0; i < points_array.length;) {
  posiciones[points_array[i].id] = ++i;
}
console.log(posiciones);

/* Hacemos uso de este método */
console.log("Posición de '129213229221019648': " +
  posiciones["129213229221019648"]
);
console.log("Posición de '242043489611808769': " +
  posiciones["242043489611808769"]
);
console.log("Posición de '190388892799598592': " +
  posiciones["190388892799598592"]
);
console.log("Posición de '290388892799598592': " +
  posiciones["290388892799598592"]
);

В случае когда они не найдут идентификатора, как функция, так и массив возвратят undefined.

1
ответ дан 24.11.2019, 11:54