@ojiekcahdp

Как рассчитать место в топе по объекту массива?

Как можно сделать, чтобы отображалось на каком месте в топе по объекту "xp" находится человек, пример массива:
[
{
"xp": 1000,
"id": 1,
"name": "Andrey"
},
{
"xp": 2304,
"id": 2,
"name": "Anton"
},..
]

Определяю человека так:
const users = require('./users.json')
const user = users.filter(x => x.id === ...)[0]

Соответственно нужно, чтобы по команде в консоль писалось: Вы на N месте в топе.
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
webdisigner
@webdisigner
Чтобы правильно решить эту проблему тебе надо сортировать массив по двум пунктам если количество опыта будет одинаковое пусть сортирует по алфавитному порядку.

var users = [
  {
    id: 1,
    xp: 500,
    name: 'Clown-ojiekcahdp',
  },
  {
    id: 2,
    xp: 9000,
    name: 'JesicaAlba',
  },
  {
    id: 7,
    xp: 500,
    name: 'BobMarley',
  },
  {
    id: 9,
    xp: 500,
    name: 'ConorMacgregor',
  },
  {
    id: 13,
    xp: 500,
    name: 'Habib',
  },
  {
    id: 37,
    xp: 50000,
    name: 'Putin',
  },
  {
    id: 12,
    xp: 500,
    name: 'Bob',
  },
  {
    id: 14,
    xp: 500,
    name: 'Klopp',
  }
] // все участники

var user =  {
    id: 37,
    xp: 50000,
    name: 'Putin',
 }

users.sort((a,b)=>b.xp-a.xp||a.name.localeCompare(b.name));

console.log(user.name + ' ваша позиция в рейтинге: ' + (users.findIndex(e=>e.id==user.id)+1))
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
RAX7
@RAX7
const user = users.find(x => x.id === 2);
const rating = users.filter(u => u.xp > user.xp).length + 1;

либо
const rating = users.reduce((acc, val) => val.xp > user.xp ? acc + 1 : acc, 1);
Ответ написан
Stalker_RED
@Stalker_RED
const yourXp = 1001;
const yourPlaceByXp = users.reduce((place, user) => 
  (user.xp > yourXp) ? place + 1 : place
, 1);
Ответ написан
const index = users.findIndex(item => item.id === <ID>);

if (index === -1) { 
  // Не найден пользователь 
} else { 
  console.log(index + 1); 
}


...правда ощущение что я не понял вопроса, и вам надо просто отсортировать массив по "xp" и найти позиции в этом массиве.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы