我有这样的数据:
data2 = [
{
"earnings_type": "C",
"payment_date": "Jan",
"amount": 10
},
{
"earnings_type": "C",
"payment_date": "Jan",
"amount": 10
}, {
"earnings_type": "E",
"payment_date": "Jan",
"amount": 10
},
]
我需要将其转换为此
data2 = [
{
"key": "C",
"values":
[
{
"label": "15-01-2017",
"value": 20
},
{
"label": "17-02-2017",
"value": 16
}
]
},
{
"key": "E",
"values": [
{
"label": "15-01-2017",
"value": 15
}
]
}
];
我需要做的是通过数据查找所有items_type为C的项目并将其作为密钥并将值放在其下面。然后对所有items_type为A的项目执行相同的操作。
非常感谢任何帮助。
答案 0 :(得分:0)
使用Array.prototype.reduce。不确定您如何将payment_date转换为标签,因为示例数据具有payment_date的月份名称,但标签的完整日期。如果您需要使用月中点,我相信您可以根据以下代码了解如何执行此操作。
const origData = [
{
earnings_type: "C",
payment_date: "Jan",
amount: 10
},
{
earnings_type: "C",
payment_date: "Jan",
amount: 10
},
{
earnings_type: "E",
payment_date: "Jan",
amount: 10
}
];
const newData = origData.reduce((result, origDataPoint) => {
const matchingDataPoint = result.find(
datapoint => datapoint.key === origDataPoint.earnings_type
);
if (!matchingDataPoint) {
result.push({
key: origDataPoint.earnings_type,
values: [
{
label: origDataPoint.payment_date,
value: origDataPoint.amount
}
]
});
} else {
matchingDataPoint.values.push({
label: origDataPoint.payment_date,
value: origDataPoint.amount
});
}
return result;
}, []);