我有 8 个球员ab
, cd
, ef
, gh
, ij
, kl
, mn
,op
他们的比赛数据存储在一个对象数组中
matchData=[
{player1:'ab',player2:'cd',winner:'ab',looser:'cd'},
{player1:'ef',player2:'gh',winner:'gh',looser:'ef'},
{player1:'ij',player2:'kl',winner:'ij',looser:'kl'},
{player1:'mn',player2:'op',winner:'mn',looser:'op'},
{player1:'ab',player2:'cd',winner:'ab',looser:'cd'},
{player1:'ij',player2:'kl',winner:'kl',looser:'ij'},
{player1:'ij',player2:'kl',winner:'ij',looser:'kl'}]
我想从上面的比赛数据中得到顶级球员。顶级球员是胜率最高的球员
winrate=(number of matches won/total number of matches played)*100
并且还想获得看起来像的对象数组,
PlayerData=[{ab:87},{cd:78},{ef:57},{gh:75},{ij:47},{kl:14},{mn:65},{op:44}]
我怎样才能做到这一点?
您可以循环遍历数据并为每个获胜者/松散者创建新数组,如果获胜则加 1,如果输则加 0。然后计算新数组对象的获胜百分比。
matchData = [
{player1:'ab',player2:'cd',winner:'ab',looser:'cd'},
{player1:'ef',player2:'gh',winner:'gh',looser:'ef'},
{player1:'ij',player2:'kl',winner:'ij',looser:'kl'},
{player1:'mn',player2:'op',winner:'mn',looser:'op'},
{player1:'ab',player2:'cd',winner:'ab',looser:'cd'},
{player1:'ij',player2:'kl',winner:'kl',looser:'ij'},
{player1:'ij',player2:'kl',winner:'ij',looser:'kl'}
]
let tempRes = {}
for (let d of matchData) {
let { winner, looser } = d
tempRes[winner] = (tempRes[winner] || []).concat(1)
tempRes[looser] = (tempRes[looser] || []).concat(0)
}
let res = [], topPlayers = [], topValue = 0
for (let [key, value] of Object.entries(tempRes)) {
let winPercent = (value.reduce((a,b) => a + b) / value.length) * 100
res.push({ [key]: winPercent })
winPercent == topValue && (topPlayers.push(key))
winPercent > topValue && (topValue = winPercent, topPlayers = [key])
}
console.log('Top Player ', topPlayers)
console.log('Result ',res)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句