首页 > 解决方案 > 合并和加上具有相同键的数组

问题描述

我有这个 for 循环,它从 matchlistResponsestats 对象中获取每个用户的数据。当 for 循环完成时,我有大约 90 个看起来像这样的数组["username", kills, assists, deaths]

我想将数组中的数据合并并加上每个用户名。另外,我想在数组末尾添加一个新值,其中包含合并到用户名中的数组数量

for (var i = 0; i < matchArrayTotalPlayer; i++) {
            if(matchlistplayers[i].username === username) {

              const matchlistplayerkills = matchlistResponsestats.players[i].kills
              const matchlistplayerheadshots = matchlistResponsestats.players[i].headshots
              const matchlistplayerdeaths = matchlistResponsestats.players[i].deaths
              const matchlistplayerusername = matchlistResponsestats.players[i].username
              console.log(matchlistResponsestats)
              var playermatchstats = [matchlistplayerusername, matchlistplayerkills, matchlistplayerheadshots, matchlistplayerdeaths]
            }

for 循环 (playermatchstats) 的输出如下所示

["dJadebisi", 17, 5, 19], ["softarlugnt", 16, 8, 22], ["pruttstjert", 1, 0, 5], ["dJadebisi", 16, 4, 8], ["pruttstjert", 10, 0, 15], ["softarlugnt", 9, 1, 20]... 

我想要一个看起来像这样的输出:

["dJadebisi", 33, 9, 27, 2],["softarlugnt", 25, 9, 42, 2], ["pruttstjert", 11, 0, 20, 2]

有人可以给我一个正确方向的提示吗?

标签: javascriptarrays

解决方案


您可以使用reduce来实现这一点

matchArrayTotalPlayer.reduce( (acc, cur) => {
 const name = cur[0]
 let el = acc.find(item => item[0] === name)

 if (!el) {
  el = [name, 0, 0, 0]
  acc.push(el)
 }

 el[1] += cur[1]
 el[2] += cur[2]
 el[3] += cur[3]
 el[4] ++

 return acc
}, [])

推荐阅读