JavaScript中的分组依据-嵌套JSON的平面数组

JavaScript中的分组依据-嵌套JSON的平面数组,javascript,json,typescript,group-by,javascript-objects,Javascript,Json,Typescript,Group By,Javascript Objects,我的前端typescript文件中有以下列表: pomonts: 0: {id: 1, companyName: "company14", companyId: 14, flActive: true, purchaseMonth: "2019-12-15T00:00:00", purchaseMonthString: "Dec-2019" , year: 2019, month: "December"} 1: {id: 2, companyName: "company5", companyId:

我的前端typescript文件中有以下列表:

pomonts:

0: {id: 1, companyName: "company14", companyId: 14, flActive: true, purchaseMonth: "2019-12-15T00:00:00", purchaseMonthString: "Dec-2019" , year: 2019, month: "December"}
1: {id: 2, companyName: "company5", companyId: 5, flActive: true, purchaseMonth: "2019-12-15T00:00:00", …}
2: {id: 3, companyName: "company13", companyId: 13, flActive: true, purchaseMonth: "2019-11-15T00:00:00", …}
3: {id: 4, companyName: "company14", companyId: 14, flActive: true, purchaseMonth: "2019-11-15T00:00:00", …}
4: {id: 5, companyName: "company5", companyId: 5, flActive: true, purchaseMonth: "2019-10-15T00:00:00", …}
5: {id: 6, companyName: "company14", companyId: 14, flActive: true, purchaseMonth: "2020-09-15T00:00:00", …}
6: {id: 7, companyName: "company7", companyId: 7, flActive: true, purchaseMonth: "2020-09-15T00:00:00", …}
我想从中得到一个嵌套的树json,它按compnayName和year属性分组,类似于此,但采用json格式:

我已经找到了这段代码,但是它没有完全返回结果,需要稍微调整一下:

keys = [
    'year',
    'companyName'
  ];

groupBy() {
    const drill = (o, key, ...keys) =>
      key ? drill((o[key] = o[key] || {}), ...keys) : o;
    const result = {};
    for (const e of this.poMonths) {
      const key = drill(
        result,
        e.companyName,
        e.year,

        e.month
      );
    }
    return result;
  }

我怎样才能让它工作呢?

您可以使用。它以一个空对象开始,当在特定键下还没有定义对象/数组时,将分配默认值(将执行
|
操作符的右侧):

let input=[{id:1,companyName:“company14”,companyId:14,flActive:true,purchaseMonth:“2019-12-15T00:00:00”,年份:2019,月份:“12月”},
{id:2,companyName:“company5”,companyId:5,flActive:true,purchaseMonth:“2019-12-15T00:00:00”,年份:2019,月份:“12月”},
{id:3,公司名称:“公司13”,公司id:13,flActive:true,purchaseMonth:“2019-11-15T00:00:00”,年份:2019,月份:“11月”},
{id:4,公司名称:“公司14”,公司id:14,flActive:true,purchaseMonth:“2019-11-15T00:00:00”,年份:2019,月份:“12月”},
{id:5,companyName:“company5”,companyId:5,flActive:true,purchaseMonth:“2019-10-15T00:00:00”,year:2019,month:“十月”},
{id:6,公司名称:“公司14”,公司id:14,flActive:true,purchaseMonth:“2020-09-15T00:00:00”,年份:2020,月份:“9月”},
{id:7,companyName:“company7”,companyId:7,flActive:true,purchaseMonth:“2020-09-15T00:00:00”,年份:2020,月份:“九月”}]
让月份={“09”:“9月”、“10月”、“10月”、“11月”、“11月”、“12月”:“12月”}
让结果=输入。减少((状态,电流)=>{
设{companyName,year,month}=当前;
让company=state[companyName]| |(state[companyName]={});
设yearObj=company[year]| |(company[year]={});
让monthArr=yearObj[month]| |(yearObj[month]=[]);
蒙特哈尔推力(电流);
返回状态;
}, {});

控制台日志(结果)@EfronA。修改了我的回答你知道我如何在“月”级别上使用“id”属性吗?目前,id将显示为月下的一个孩子,但是,每个月下面只有一个id,因此我希望在月级别显示id。你会怎么做?@EfronA。请打开另一个问题以保持此问题的清晰谢谢,根据您的回答,这里的问题略有不同: