#node.js #arrays #json #object #search
Вопрос:
У меня есть файл JSON, содержащий игровые объекты, я хочу получить топ-5 игр с наибольшим общим временем воспроизведения между пользователями.
Я попытался получить все объекты, прочитав файл с помощью файловой системы в nodejs :
const queryGames = async () => {
let data = fs.readFileSync(path.resolve(__dirname, '../../games.json'))
let games = JSON.parse(data)
return games
}
/**
* Query for top games by play time
* @returns {Promise<QueryResult>}
*/
const selectTopByPlaytime = async () => {
}
это файл json : https://jsoneditoronline.org/#left=cloud.3b82169327044c04b7207fa186aee85bamp;right=local.tiniqu
Комментарии:
1. Ты пытался что-то сделать ?
2. @RaphaelPICCOLO Я не уверен, какой метод или алгоритм мне следует использовать
Ответ №1:
что-то вроде этого должно сработать.
const gamePlayData = require('./gamePlay.json').data
/**
* Query for games and time
* @returns {
'League of legends': 1650,
'World of warcraft': 2300,
'Dark Souls': 218,
'The Witcher 3: Wild Hunt': 987,
etc....
}
*/
const getGamePlayTimes = () => {
gamePlayTimes = {}
gamePlayData.forEach( (playData) => {
const gameName = playData.game
if(gamePlayTimes[gameName]) {
gamePlayTimes[gameName] = playData.playTime
}
else {
gamePlayTimes[gameName] = playData.playTime
}
})
return gamePlayTimes;
}
const getGamesAndTimesAsList = (playTimes) => {
let gamesWithTimeArr = [];
let i = 0;
for(let game in playTimes) {
let gameAndPlayTime = {game: "", playTime: 0};
gameAndPlayTime.game = game;
gameAndPlayTime.playTime = playTimes[game];
gamesWithTimeArr[i ] = gameAndPlayTime
}
return gamesWithTimeArr;
}
const reverseBubbleSort = (a, par) => {
let swapped;
do {
swapped = false;
for (var i = 0; i < a.length - 1; i ) {
if (a[i][par] < a[i 1][par]) {
var temp = a[i];
a[i] = a[i 1];
a[i 1] = temp;
swapped = true;
}
}
} while (swapped);
return a;
}
sortedArr = reverseBubbleSort(getGamesAndTimesAsList( getGameAndPlayTimes() ) , 'playTime')
const top5 = sortedArr.slice(0, 5);
console.log(top5);