Вот всего, используя Array.prototype.reduce
:
const transformed = [{"account":"Navy Federal Credit Union","date":"2020-01-01","category":"Travel","name":"United Airlines","amount":500},{"account":"Navy Federal Credit Union","date":"2019-12-30","category":"Travel","name":"Uber 072515 SF**POOL**","amount":6.33},{"account":"Navy Federal Credit Union","date":"2019-12-27","category":"Food and Drink","name":"Tectra Inc","amount":500}]
const unrounded = transformed.reduce(
(acc, { amount }) => acc + amount,
0
);
const roundCents = amount => Math.round(amount * 100) / 100;
const total = roundCents(unrounded);
console.log(total);
Более простая версия вышеперечисленного, без разрушения:
const transformed = [{"account":"Navy Federal Credit Union","date":"2020-01-01","category":"Travel","name":"United Airlines","amount":500},{"account":"Navy Federal Credit Union","date":"2019-12-30","category":"Travel","name":"Uber 072515 SF**POOL**","amount":6.33},{"account":"Navy Federal Credit Union","date":"2019-12-27","category":"Food and Drink","name":"Tectra Inc","amount":500}]
const unrounded = transformed.reduce(
(acc, transaction) => acc + transaction.amount,
0
);
const roundCents = amount => Math.round(amount * 100) / 100;
const total = roundCents(unrounded);
console.log(total);
А вот как преобразовать transactionsData
с Array.prototype.flatMap
и Array.prototype.map
, а не forEach
:
const transactionsData = [{ accountName: 'a1', transactions: [{ date: '2020', category: ['c1'], name: 'n1', amount: 100 }, { date: '2020', category: ['c2'], name: 'n2', amount: 100 }]}, { accountName: 'a2', transactions: [{ date: '2020', category: ['c3'], name: 'n3', amount: 100 }, { date: '2020', category: ['c4'], name: 'n4', amount: 100 }]}]
const transformed = transactionsData.flatMap(({ accountName, transactions }) =>
transactions.map(({ date, category, name, amount }) => ({
account: accountName,
date,
category: category[0],
name,
amount
})
)
);
console.log(transformed)
И снова, более простая версия, без деструктуризации:
const transactionsData = [{ accountName: 'a1', transactions: [{ date: '2020', category: ['c1'], name: 'n1', amount: 100 }, { date: '2020', category: ['c2'], name: 'n2', amount: 100 }]}, { accountName: 'a2', transactions: [{ date: '2020', category: ['c3'], name: 'n3', amount: 100 }, { date: '2020', category: ['c4'], name: 'n4', amount: 100 }]}]
const transformed = transactionsData.flatMap(account =>
account.transactions.map(transaction => ({
account: account.accountName,
date: transaction.date,
category: transaction.category[0],
name: transaction.name,
amount: transaction.amount
})
)
);
console.log(transformed)
Array.prototype.map
- правильный метод для использования, если вы хотите создать новый массив из существующего, и Array.prototype.flatMap
- правильный метод для использования, если вам нужно плоский массив и map
сгенерируют вложенный массив.