如何使用 js 数组方法(如 map()、reduce()、filter() 等)格式化来自服务器的响应,如下所示?



这是我需要重新格式化的 API 的响应对象:

const data = {
id: 12,
currency: "USD",
transactions: [
{
from_wallet_id: 14,
transaction_amount: '30.00',
type: 'income',
"date": "2019-12-04T06:45:49.394000+06:00"
},
{
from_wallet_id: 11,
transaction_amount: '50.00',
type: 'expenses',
date: "2019-12-04T06:45:49.394000+06:00"
},
{
from_wallet_id: 11,
transaction_amount: '70.00',
type: 'transfer',
date: "2019-12-06T06:45:49.394000+06:00"
},
{
from_wallet_id: 14,
transaction_amount: '40.00',
type: 'transfer',
date: "2019-12-08T06:45:49.394000+06:00"
},
]
}

我需要将其更改为下面给出的示例(使用数组方法,例如reduce,map,filter等( 一点点信息: 收入是该日期的交易总和。 费用是该日期的交易总和。 "转移"类型可以是收入或支出 如果类型为"传输"且from_wallet_id不等于 data.id 然后它将被添加到收入中,否则将被添加到费用中

formattedObject = {
"2019-12-04": {
date: "2019-12-04",
income: 30,
expenses: 50
},
"2019-12-06": {
date: "2019-12-06",
income: 0,
expenses: 70
},
"2019-12-08": {
date: "2019-12-08",
income: 40,
expenses: 0
}
}

您可以减少数组并调整type: 'transfer'

const
data = { id: 12, currency: "USD", transactions: [{ from_wallet_id: 14, transaction_amount: '30.00', type: 'income', date: "2019-12-04T06:45:49.394000+06:00" }, { from_wallet_id: 11, transaction_amount: '50.00', type: 'expenses', date: "2019-12-04T06:45:49.394000+06:00" }, { from_wallet_id: 11, transaction_amount: '70.00', type: 'transfer', date: "2019-12-06T06:45:49.394000+06:00" }, { from_wallet_id: 14, transaction_amount: '40.00', type: 'transfer', date: "2019-12-08T06:45:49.394000+06:00" }] },
result = data.transactions.reduce((r, { from_wallet_id, transaction_amount, type, date }) => {
date = date.slice(0, 10);
if (type === 'transfer') type = data.id === from_wallet_id ? 'expenses' : 'income'; 
r[date] = r[date] || { date, income: 0, expenses: 0 };
r[date][type] += +transaction_amount;
return r;
}, {});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

最新更新