Задать вопрос
ArtemEfremov
@ArtemEfremov

Как сделать топ пользователей?

Здравствуйте. Возник вопрос. Есть бот ВКонтакте и JSON-база данных, там все пользователи бота и т.д. Как можно сделать такую штуку по типу «10 самых активных пользователей», и там идет уже сортировка по количеству написанных сообщений.

• Пользователь 1 | 10 смс
• Пользователь 2 | 7 смс
• Пользователь 3 | 5 смс

Как можно сделать примерно такую сортировку?
  • Вопрос задан
  • 361 просмотр
Подписаться 1 Средний 4 комментария
Решения вопроса 1
yarkov
@yarkov
Помог ответ? Отметь решением.
const users = [
  {
    "id": "1",
    "nick": "Паша",
    "msg": 30,
  },
  {
    "id": "2",
    "nick": "Денис",
    "msg": 10,
  },
  {
    "id": "3",
    "nick": "Вася",
    "msg": 1,
  },
  {
    "id": "4",
    "nick": "Пантелеймон",
    "msg": 500,
  },
  {
    "id": "5",
    "nick": "Володя",
    "msg": 5,
  }
];

function compareUsers(a, b) {
	if (a.msg > b.msg) {
  	return 1
  } else if (a.msg < b.msg) {
  	return -1
  } else {
  	return 0
  }
}

console.log(users.sort(compareUsers)); // по возрастанию
console.log(users.sort(compareUsers).slice().reverse()); // по убыванию
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@StockholmSyndrome
только если в базе хранить все сообщения, иначе никак
боты-сообщества не сохраняют историю переписки в беседах
Ответ написан
Demigodd
@Demigodd
Я посоветовал бы вам вместо JSON + файл, использовать нормальную SQL базу.
Так как в скором времени файл может вырастить и операций добавить, удалить.. будут требовать чуть больше времени чем это нужно.

А так для работы с JSON вам нужнл знать всего 2 метода.
JSON.stringify - преоброзовать обьект в JSON(в строку).
JSON.parse - строку обратно в обьект.

То есть берем вашу базу данных, прогоняем через parse получаем массив с js обьектами(юзерами).

Потом можно к примеру сортировать и выбрать первые 10 обьектов.

const top10users = user.sort((a, b)=> (a.messageCount > b.mesaageCount) ? 1 : -1).slice(0,10);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы