我正在使用nodeJS进行一些查询,以从JSON文件中检索自定义数据,我想从这个集合中返回玩得最多的游戏(玩得最多的游戏是用户之间总玩时间最高的游戏)
以下是JSON:
{
"data": [
{
"userId": 8,
"game": "League of legends",
"playTime": 500,
"genre": "MOBA",
"platforms": [
"PC"
]
},
{
"userId": 7,
"game": "World of warcraft",
"playTime": 1500,
"genre": "MMORPG",
"platforms": [
"PC"
]
},
{
"userId": 88,
"game": "Dark Souls",
"playTime": 109,
"genre": "Action RPG",
"platforms": [
"PS3",
"Xbox 360",
"PC",
"PS4",
"Xbox One",
"Nintendo Switch"
]
},
{
"userId": 88,
"game": "The Witcher 3: Wild Hunt",
"playTime": 9,
"genre": "RPG",
"platforms": [
"PC",
"PS4",
"Xbox One",
"Nintendo Switch"
]
},
{
"userId": 1,
"game": "The last of us 2",
"playTime": 100,
"genre": "FPS",
"platforms": [
"PS4",
"PC"
]
},
{
"userId": 7,
"game": "Hitman 3",
"playTime": 60,
"genre": "Stealth",
"platforms": [
"PS4",
"PS5",
"Xbox One",
"Nintendo Switch",
"PC"
]
},
{
"userId": 99,
"game": "Minecraft",
"playTime": 1002,
"genre": "Sandbox",
"platforms": [
"PC"
]
},
{
"userId": 7,
"game": "Hearthstone",
"playTime": 1000,
"genre": "Card Game",
"platforms": [
"PC"
]
},
{
"userId": 7,
"game": "FIFA",
"playTime": 2000,
"genre": "Sport",
"platforms": [
"PC",
"PS4",
"Xbox One"
]
},
{
"userId": 2,
"game": "The Witcher 3: Wild Hunt",
"playTime": 78,
"genre": "RPG",
"platforms": [
"PC",
"PS4",
"Xbox One",
"Nintendo Switch"
]
},
{
"userId": 47,
"game": "League of legends",
"playTime": 850,
"genre": "MOBA",
"platforms": [
"PC"
]
},
{
"userId": 2,
"game": "Among Us",
"playTime": 5000,
"genre": "Multiplayer",
"platforms": [
"PC",
"Android"
]
},
{
"userId": 2,
"game": "Valorant",
"playTime": 2000,
"genre": "FPS",
"platforms": [
"PC"
]
},
{
"userId": 9,
"game": "Valorant",
"playTime": 80,
"genre": "FPS",
"platforms": [
"PC"
]
},
{
"userId": 9,
"game": "Dark Souls",
"playTime": 109,
"genre": "RPG",
"platforms": [
"PS3",
"Xbox 360",
"PC",
"PS4",
"Xbox One",
"Nintendo Switch"
]
},
{
"userId": 9,
"game": "The Witcher 3: Wild Hunt",
"playTime": 900,
"genre": "RPG",
"platforms": [
"PC",
"PS4",
"Xbox One",
"Nintendo Switch"
]
},
{
"userId": 24,
"game": "League of legends",
"playTime": 300,
"genre": "MOBA",
"platforms": [
"PC"
]
},
{
"userId": 24,
"game": "World of warcraft",
"playTime": 800,
"genre": "MMORPG",
"platforms": [
"PC"
]
},
{
"userId": 54,
"game": "Minecraft",
"playTime": 231,
"genre": "Sandbox",
"platforms": [
"PC"
]
},
{
"userId": 7,
"game": "Minecraft",
"playTime": 777,
"genre": "Sandbox",
"platforms": [
"PC"
]
},
{
"userId": 7,
"game": "Hitman 3",
"playTime": 90,
"genre": "Stealth",
"platforms": [
"PS4",
"PS5",
"Xbox One",
"Nintendo Switch",
"PC"
]
}
]
}
我已经通过编写以下函数来完成此操作:
const selectTopByPlaytime = async (options) => {
return _.chain(games)
.groupBy('game')
.map((value, key) => {
return {
'game': key,
'playTime': _.reduce(value, function (memo, i) { return memo + i.playTime; }, 0),
'genre': value[0].genre,
'platforms': value[0].platforms,
};
})
.sortBy((i) => { return -i.playTime; })
.first(5).value()
}
我试图通过添加queryparams过滤器来修改这个函数,以按播放时间返回发送参数后可用的顶级游戏。
示例:基本URL/按播放时间选择顶部?流派=FPS将按播放时间返回按FPS流派分类的顶级游戏。
请帮忙!