Javascript 如何使子对象不在ag网格中重复(角度)

Javascript 如何使子对象不在ag网格中重复(角度),javascript,angular,typescript,ag-grid,Javascript,Angular,Typescript,Ag Grid,我试图使子项仅基于assetCode 其中应显示PRN,PRN1和PRN2 下面是列表组件的代码 列表.组件.ts this.rowData.push( { “代码”:“机器1”,“资产代码”:“PRN”,“资产帐户”:1, “日期”:“2019-01-18 00:00:00” }, { “代码”:“机器1”,“资产代码”:“PRN”,“资产帐户”:1, “日期”:2019-01-19 00:00:00 }, { “代码”:“机器2”,“资产代码”:“PRN 1”,“资产帐户”:3, “日期”:

我试图使子项仅基于
assetCode
其中应显示
PRN
PRN1
PRN2

下面是列表组件的代码

列表.组件.ts

this.rowData.push(
{
“代码”:“机器1”,“资产代码”:“PRN”,“资产帐户”:1,
“日期”:“2019-01-18 00:00:00”
},
{
“代码”:“机器1”,“资产代码”:“PRN”,“资产帐户”:1,
“日期”:2019-01-19 00:00:00
},
{
“代码”:“机器2”,“资产代码”:“PRN 1”,“资产帐户”:3,
“日期”:2019-01-20 00:00:00
},
{
“代码”:“机器3”,“资产代码”:“PRN”,“资产帐户”:1,
“日期”:“2019-01-21 00:00:00”
},
{
“代码”:“机器4”,“资产代码”:“PRN 1”,“资产帐户”:3,
“日期”:“2019-01-22 00:00:00”
},
{
“代码”:“机器5”,“资产代码”:“PRN 2”,“资产帐户”:3,
“日期”:“2019-01-23 00:00:00”
},
);
this.rowData=this.rowData.filter((项目:任意)=>{
返回格式(item.date,'YYYY')==参数;
});
const newData:any=[];
this.rowData.forEach((x:any)=>{
const existing=newData.find((y:any)=>format(y.date,'YYYY-MM')==format(x.date,'YYYY-MM'))
&&y.assetCode==x.assetCode&&y.code==x.code);
如果(现有){
existing.assetCount+=existing.assetCount;
}否则{
newData.push(x);
this.rowData=newData;
}
});
这是推(
{
“headerName”:“样式/机器”,
“字段”:“代码”,
'固定':'左',
“锁定位置”:true
}
);
for(设i=0;i<12;i++){
常数记录={
“headerName”:这个。monthNames[i]。monthName,
“儿童”:[
{
'headerName':'Total','columnGroupShow':'closed',
“valueGetter:”,“headerClass:”,“cellStyle:{}
}
]
};
this.rowData.forEach((键:any)=>{
if(this.monthNames[i].monthName==格式(key.date,'MMMM')){
录音、儿童、推(
{
“headerName”:key.code,“columnGroupShow”:“open”,“headerClass”:“header文本中心”,
'cellStyle':{'justify content':'center'},
“valueGetter”:key.assetCount?key.assetCount.toString():null
}
);
}
});
此.columnDefs.push(记录);
}
}
输出

预期产出

提前谢谢你的帮助

试试这个

constgroupby=(项,键)=>items.reduce(
(结果,项目)=>({
…结果,
[项目[关键]]:[
…(结果[项[键]]| |[]),
项目,,
],
}), 
{},
);
变量列表=[{
“代码”:“机器1”,“资产代码”:“PRN”,“资产帐户”:1,
“日期”:“2019-01-18 00:00:00”
},
{
“代码”:“机器1”,“资产代码”:“PRN”,“资产帐户”:1,
“日期”:2019-01-19 00:00:00
},
{
“代码”:“机器2”,“资产代码”:“PRN 1”,“资产帐户”:3,
“日期”:2019-01-20 00:00:00
},
{
“代码”:“机器3”,“资产代码”:“PRN”,“资产帐户”:1,
“日期”:“2019-01-21 00:00:00”
},
{
“代码”:“机器4”,“资产代码”:“PRN 1”,“资产帐户”:3,
“日期”:“2019-01-22 00:00:00”
},
{
“代码”:“机器5”,“资产代码”:“PRN 2”,“资产帐户”:3,
“日期”:“2019-01-23 00:00:00”
}];
const group=groupBy(列表“代码”);
//控制台日志(分组);
设newArr=[];
for(对象的变量键。键(分组)){
设obj={};
obj[“代码”]=键;
分组[key].forEach(函数(元素){
//控制台日志(元素);
如果(!obj.hasOwnProperty(element.assetCode))
{ 
obj[element.assetCode]=0;
}
obj[element.assetCode]=obj[element.assetCode]+element.assetCount;
});
新推力(obj);
}
控制台日志(newArr)试试这个

constgroupby=(项,键)=>items.reduce(
(结果,项目)=>({
…结果,
[项目[关键]]:[
…(结果[项[键]]| |[]),
项目,,
],
}), 
{},
);
变量列表=[{
“代码”:“机器1”,“资产代码”:“PRN”,“资产帐户”:1,
“日期”:“2019-01-18 00:00:00”
},
{
“代码”:“机器1”,“资产代码”:“PRN”,“资产帐户”:1,
“日期”:2019-01-19 00:00:00
},
{
“代码”:“机器2”,“资产代码”:“PRN 1”,“资产帐户”:3,
“日期”:2019-01-20 00:00:00
},
{
“代码”:“机器3”,“资产代码”:“PRN”,“资产帐户”:1,
“日期”:“2019-01-21 00:00:00”
},
{
“代码”:“机器4”,“资产代码”:“PRN 1”,“资产帐户”:3,
“日期”:“2019-01-22 00:00:00”
},
{
“代码”:“机器5”,“资产代码”:“PRN 2”,“资产帐户”:3,
“日期”:“2019-01-23 00:00:00”
}];
const group=groupBy(列表“代码”);
//控制台日志(分组);
设newArr=[];
for(对象的变量键。键(分组)){
设obj={};
obj[“代码”]=键;
分组[key].forEach(函数(元素){
//控制台日志(元素);
如果(!obj.hasOwnProperty(element.assetCode))
{ 
obj[element.assetCode]=0;
}
obj[element.assetCode]=obj[element.assetCode]+element.assetCount;
});
新推力(obj);
}

控制台日志(newArr)一个stackblitz示例非常好,可以了解正在发生的事情--@Kenny@ABC该示例不起作用。您是否确定它已将表加载到视图中,并且所有导入和节点模块都已就位,以便该示例正常工作?@SriVenkataPavanKumarMHSA stackblitz示例将非常好,要了解正在发生的事情--@Kenny@ABC该示例不起作用。是否确实已将表加载到视图中,并且所有导入和节点模块都已就位,以便该示例正常工作?@SriVenkataPavanKumarMHShow'bou
this.rowData.push(
      {
        'code': 'Machine 1', 'assetCode': 'PRN', 'assetCount': 1,
        'date': '2019-01-18 00:00:00'
      },
      {
        'code': 'Machine 1', 'assetCode': 'PRN', 'assetCount': 1,
        'date': '2019-01-19 00:00:00'
      },
      {
        'code': 'Machine 2', 'assetCode': 'PRN 1', 'assetCount': 3,
        'date': '2019-01-20 00:00:00'
      },
      {
        'code': 'Machine 3', 'assetCode': 'PRN', 'assetCount': 1,
        'date': '2019-01-21 00:00:00'
      },
      {
        'code': 'Machine 4', 'assetCode': 'PRN 1', 'assetCount': 3,
        'date': '2019-01-22 00:00:00'
      },
      {
        'code': 'Machine 5', 'assetCode': 'PRN 2', 'assetCount': 3,
        'date': '2019-01-23 00:00:00'
      },
    );

    this.rowData = this.rowData.filter((item: any) => {
      return format(item.date, 'YYYY') === param;
    });

    const newData: any = [];
    this.rowData.forEach((x: any) => {
      const existing = newData.find((y: any) => format(y.date, 'YYYY-MM') === format(x.date, 'YYYY-MM')
        && y.assetCode === x.assetCode && y.code === x.code);
      if (existing) {
        existing.assetCount += existing.assetCount;
      } else {
        newData.push(x);
        this.rowData = newData;
      }
    });

    this.columnDefs.push(
      {
        'headerName': 'Style/Machine',
        'field': 'code',
        'pinned': 'left',
        'lockPosition': true
      }
    );

    for (let i = 0; i < 12; i++) {
      const record = {
        'headerName': this.monthNames[i].monthName,
        'children': [
          {
            'headerName': 'Total', 'columnGroupShow': 'closed',
            'valueGetter': ' ', 'headerClass': '', 'cellStyle': {}
          }
        ]
      };

      this.rowData.forEach((key: any) => {
        if (this.monthNames[i].monthName === format(key.date, 'MMMM')) {
          record.children.push(
            {
              'headerName': key.code, 'columnGroupShow': 'open', 'headerClass': 'header-text-center',
              'cellStyle': { 'justify-content': 'center' },
              'valueGetter': key.assetCount ? key.assetCount.toString() : null
            }
          );
        }
      });
      this.columnDefs.push(record);
    }
    }