[英]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.