Javascript 将数组从';长';数据格式为';宽';总体安排

Javascript 将数组从';长';数据格式为';宽';总体安排,javascript,arrays,Javascript,Arrays,我正在尝试转换从API获取的数据,以匹配我希望显示的表格式,以显示未来的收入。我有以下数组: const data = [{ director: 'Michael', lead: 'Jim', mgr: 'Dwight', Name: 'A', Month: 'Oct', Revenue: 2 },{ director: 'Michael', lead: '

我正在尝试转换从API获取的数据,以匹配我希望显示的表格式,以显示未来的收入。我有以下数组:

const data = [{
        director: 'Michael',
        lead: 'Jim',
        mgr: 'Dwight',
        Name: 'A',
        Month: 'Oct',
        Revenue: 2
      },{
        director: 'Michael',
        lead: 'Jim',
        mgr: 'Dwight',
        Name: 'A',
        Month: 'Nov',
        Revenue: 3
      },{
        director: 'Michael',
        lead: 'Jim',
        mgr: 'Dwight',
        Name: 'B',
        Month: 'Dec',
        Revenue: 1
      },{
        director: 'Michael',
        lead: 'Jim',
        mgr: 'Andy',
        Name: 'B',
        Month: 'Nov',
        Revenue: 4
      }]
我希望能够将数组转换为如下所示:

const data2 = [{
        director: 'Michael',
        lead: 'Jim',
        mgr: 'Dwight',
        Name: 'A',
        Oct: 2,
        Nov: 3,
        Dec: 0
      },{
        director: 'Michael',
        lead: 'Jim',
        mgr: 'Dwight',
        Name: 'B',
        Oct: 0,
        Nov: 0,
        Dec: 1
      },{
        director: 'Michael',
        lead: 'Jim',
        mgr: 'Andy',
        Name: 'B',
        Oct: 0,
        Nov: 4,
        Dec: 0
      }]
基本上,我希望按前几个属性对数据进行分组,然后按月汇总给定组的收入


我还没有找到一个可行的解决办法。有什么想法吗?谢谢

几个数组和一个映射就可以做到这一点

const数据=[{
名称:‘A’,
月份:'十月',
收入:2
},{
名称:‘A’,
月份:“11月”,
收入:3
},{
名称:‘B’,
月份:'Dec',
收入:1
}];
const months=data.reduce((acc,{Month})=>(acc[Month]=0,acc),{});
const result=Object.entries(data.reduce((acc,{name,Month,Revenue})=>{
acc[名称]=acc[名称]| |{};
acc[名称][月份]=收入;
返回acc;
}.map(([name,obj])=>({name,…months,…obj}));

控制台日志(结果)
是否会出现多次列出姓名和月份的情况?@zfrisch。不,我不认为这是意料之中的。有没有关于如何解决的想法?谢谢你的回答。我明白了,我需要更深入一点。你能看看我更新的问题,然后扩展你的答案吗?我非常感谢您的进一步见解。好吧,现在这个答案看起来是针对一个不同的问题-事实上,您的输入上没有一个键映射到输出上的记录,这使代码复杂了很多-我将删除答案