如何根据另一个对象数组的值创建一个对象数组?

老阿琼

我有 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据另一个对象数组查找一个对象数组?

使用来自另一个对象的值创建一个对象数组

如何使用javascript根据另一个数组值过滤对象数组?

根据另一个对象数组过滤对象数组。删除数组值与另一个对象数组中的数组值匹配的项目

如何基于数组和另一个对象创建一个新对象?

使用伪对象从另一个对象数组创建一个对象数组

角度-根据另一个对象数组中的值过滤对象数组

Javascript:根据另一个对象数组对一个对象数组进行排序

无法根据另一个对象数组过滤一个对象数组

如何根据另一个数组的对象更改数组的对象

以编程方式基于另一个对象数组创建一个对象数组

根据另一个对象数组替换键

如何使用javascript根据另一个数组对象的属性值过滤对象数组

根据另一个数组中的值删除嵌套对象数组中的值

根据对象的数据将单独的数组创建到另一个数组中

如何基于另一个对象数组创建对象数组?

根据对象的另一个值将相同的多个对象推入多个数组

根据另一个对象数组的属性值对数组进行排序

根据另一个数组中的值从数组中删除对象

根据javascript中的另一个数组更改对象数组的值

根据另一个数组中的值过滤对象数组

根据另一个数组项更新数组对象值

根据另一个数组值Javascript对对象数组进行排序

如何从另一个对象数组中减去一个对象数组

根据另一个值数组过滤对象数组,返回一个空列表

如何从另一个对象数组更新一个对象数组中不存在的值?

如何将一个数组对象的值作为另一个数组对象的键

如何根据另一个数组对对象数组进行过滤和排序

如何根据 id 对来自另一个数组的对象数组应用类