javascript - 合并和加上具有相同键的数组
问题描述
我有这个 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]
有人可以给我一个正确方向的提示吗?
解决方案
您可以使用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
}, [])
推荐阅读
- c++ - c++ struct of struct的向量
- flutter - 使用 InkWell 更改卡片颜色和文本
- c - 矩阵 1 和 2 与 C 中的“AND”和“OR”运算的逻辑乘法
- sql - SQl - 如何在彼此相隔 7 天内抓取重复记录
- kubernetes - 如何让 Ingress 与具有所需端口的游戏服务器一起使用 azure 上的 nodeports
- arrays - 索引超出范围,如果不是。VB.net
- python - 来自子目录的 Python 项目组织
- c++ - 未定义对符号“_ZN5boost6system15system_categoryEv”的引用
- python-3.x - 在两个嵌套的 for 循环之间初始化一个变量
- c# - 多行文本块中的自动调整字体大小