簡體   English   中英

如何在角度對象鍵上使用 groupBy

[英]How to use groupBy on Object Key in angular

如何使用基於 angular 中的object key的數組` array``,資產`` 上的array``,PRN, PRN1, PRN2 ..

這是我的 list.component.ts 的代碼

首先,我在param === 2019當前日期的位置對其進行過濾。

列表.component.ts

this.rowData.push(
      {
        'code': 'Machine 1', 'assetCode': 'PRN', 'assetCount': 1,
        'date': '2019-01-19 02: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 merge = (array: any) => array.reduce((results: any, item: any) => {
      const data = results.find((i: any) => i.code === item.code);
      if (data) {
        data.assets[item.assetCode] = (data.assets[item.assetCode] || 0) + item.assetCount;
      } else {
        results.push({
          code: item.code,
          date: item.date,
          assets: { [item.assetCode]: item.assetCount }
        });
      }
      return results;
    }, []);

    this.rowData = merge(this.rowData);

this.rowData.forEach((key: any) => {
        console.log(key);

});

我要的是group它的基礎上,如對象鍵PRN/PRN1/PRN2

應該是這樣的(例子)

{
 PRN: [{
    'code': 'Machine 1',
    'assetCount': 2,
    'date': '2019-01-19'
  }],
PRN 1: [{
        'code': 'Machine 2',
        'assetCount': 3,
        'date': '2019-01-19'
      }]
}

安慰在此處輸入圖片說明

提前致謝。

將結果轉換為對象而不是數組,我在下面的代碼中排除了您的一些邏輯,您可以包含它

const merge = (array: any) => array.reduce((results: any, item: any) => {

    results[item.assetCode] = [{
      code: item.code,
      date: item.date,
      assetCount: item.assetCount
    }]
  return results;
}, {});

this.rowData = merge(this.rowData);
console.log(this.rowData);

您可以維護一個對象,並且可以通過將資產代碼作為鍵來開始將值放入該對象中。

const obj = {};
for (const [index, data] of rowData.entries()) {
  // console.log(data);
  if (obj.hasOwnProperty(data.assetCode)) {
    obj[data.assetCode].push(data);
  } else {
    obj[data.assetCode] = [];
    obj[data.assetCode].push(data);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM