我想返回一个按团队分组的数组,其中包含 gp、胜利、失败的总和。我试图通过减少来实现这一点,但是总数并没有相加。这是我的代码...
const myArr = [
{team: 'Red', gp: 3, win:2, loss:1},
{team: 'Black', gp: 3, win:1, loss:2},
{team: 'Red', gp: 10, win:8, loss:2}
]
let output = myArr.reduce(
(acc, curr) => {
acc[curr.team] = {
gp: acc.gp + curr.gp,
win: acc.win + curr.win,
loss: acc.loss + curr.loss
};
return acc;
}, {
gp: 0,
win: 0,
loss: 0
}
);
console.log(output);
此代码以我需要的格式返回数组,但是,gp、win、loss 并未求和,而是显示了最后一个数据点。
您需要将一个空对象作为累加器,然后您可以使用所需的键进行添加。
const
myArr = [{ team: 'Red', gp: 3, win: 2, loss: 1 }, { team: 'Black', gp: 3, win: 1, loss: 2 }, { team: 'Red', gp: 10, win: 8, loss: 2 }],
keys = ['gp', 'win', 'loss'],
output = myArr.reduce((acc, curr) => {
acc[curr.team] = acc[curr.team] || Object.assign(...keys.map(k => ({ [k]: 0})));
keys.forEach(k => acc[curr.team][k] += curr[k]);
return acc;
}, Object.create(null));
console.log(output);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)