Первый вопрос здесь, поэтому, пожалуйста, не стесняйтесь указывать, что я должен делать по-другому, или если есть другие потоки, на которые я должен ссылаться.
У меня есть массив объектов, которые выглядят так:
const fetchResults = [ {
date: '03/20/2020', symbol: 'TLTE', quantity: 100, amount: 3570,
}, {
date: '03/20/2020', symbol: 'GE', quantity: 100, amount: 10000,
}, {
date: '03/20/2020', symbol: 'AAPL', quantity: 50, amount: 22222,
}, {
date: '03/20/2020', symbol: 'TLTE', quantity: 4, amount: 161.02,
}, {
date: '03/20/2020', symbol: 'TLTE', quantity: 281, amount: 10034.51,
}, {
date: '03/21/2020', symbol: 'TLTE', quantity: 200, amount: 8000,
} ]
Мне нужен полезный груз, который возвращает сумму количества и суммы для каждой торговой даты и символа. В частности, в этом примере будет суммироваться количество и сумма для 3 объектов с TLTE и 3/20/20. Результаты полезной нагрузки будут выглядеть так:
const payloadResults = [ {
date: '03/20/2020', symbol: 'GE', quantity: 100, amount: 10000,
}, {
date: '03/20/2020', symbol: 'AAPL', quantity: 50, amount: 22222,
}, {
date: '03/20/2020', symbol: 'TLTE', quantity: 385, amount: 13765.53,
}, {
date: '03/21/2020', symbol: 'TLTE', quantity: 200, amount: 8000,
} ]
Вот код, который я пробовал:
const fetchResults = [ {
trade_date: '03/20/2020', symbol: 'TLTE', quantity: 100, amount: 3570,
}, {
trade_date: '03/20/2020', symbol: 'GE', quantity: 100, amount: 10000,
}, {
trade_date: '03/20/2020', symbol: 'AAPL', quantity: 50, amount: 22222,
}, {
trade_date: '03/20/2020', symbol: 'TLTE', quantity: 4, amount: 161.02,
}, {
trade_date: '03/20/2020', symbol: 'TLTE', quantity: 281, amount: 10034.51,
}, {
trade_date: '03/21/2020', symbol: 'TLTE', quantity: 200, amount: 8000,
} ]
const payloadResults = []
const uniqueTradeDates = Array.from(new Set(fetchResults.map(({ trade_date }) => trade_date)))
const uniqueSecurityIds = Array.from(new Set(fetchResults.map(({ symbol }) => symbol)))
for (const td of uniqueTradeDates) {
for (const s of uniqueSecurityIds) {
const results = fetchResults.filter((r) => r.symbol === s && r.trade_date === td)
if (results.length > 0) {
const totalQuantity = results.reduce((a, b) => a + b.quantity, 0)
const totalAmount = results.reduce((a, b) => a + b.amount, 0)
payloadResults.push({
trade_date: td, symbol: s, quantity: totalQuantity, amount: totalAmount,
})
}
}
}
console.log(payloadResults)
Спасибо за помощь!