【问题标题】:How to make the children not repeating in ag grid (angular)如何让孩子不在 ag 网格中重复(角度)
【发布时间】:2020-03-22 15:29:26
【问题描述】:

我试图让孩子应该只有 3 列基于assetCode 其中应该显示PRNPRN1PRN2

这是列表组件的代码

list.component.ts

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);
    }
    }

输出

预期输出

提前感谢您的帮助

【问题讨论】:

  • 一个 stackblitz 的例子会很好,了解正在发生的事情
  • @ABC 该示例无法正常工作您确定它会将表格加载到视图中并且所有导入和节点模块都已就位以使示例正常工作吗?
  • @SriVenkataPavanKumarMHS

标签: javascript angular typescript ag-grid


【解决方案1】:

试试这个

const groupBy = (items, key) => items.reduce(
  (result, item) => ({
    ...result,
    [item[key]]: [
      ...(result[item[key]] || []),
      item,
    ],
  }), 
  {},
);
 var list= [{
        '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'
      }];
      
const grouped = groupBy(list, 'code');
    
//console.log(grouped);
let newArr =[];
for (var key of Object.keys(grouped)) {
let obj ={};
obj["code"] =key;
grouped[key].forEach(function(element){
  //console.log(element);
  if (!obj.hasOwnProperty(element.assetCode)) 
  { 
    obj[element.assetCode] = 0;
  }
  obj[element.assetCode] = obj[element.assetCode] +element.assetCount;
});
newArr.push(obj);

    
}
console.log(newArr);

【讨论】:

  • 先生,日期怎么样?
  • 有日期条件吗?
猜你喜欢
  • 2020-10-05
  • 2019-02-14
  • 2021-01-15
  • 1970-01-01
  • 2020-03-19
  • 2020-05-08
  • 2021-09-23
  • 1970-01-01
  • 2021-07-26
相关资源
最近更新 更多