【发布时间】:2022-01-14 19:22:31
【问题描述】:
我有一个对象数组,我想用累积值更新这些对象中的两个属性。我们的想法是只累积计算两个属性(eopAdvanceTickets 和 eopAdvanceRevenue),但不是这样,而是累积计算所有值。
预期的结果应该是这样的:
const arr = [
{
"soldTickets": 0,
"soldRevenue": 0,
"playedOffTickets": 0,
"playedOffRevenue": 0,
"advanceTickets": 11407,
"advanceRevenue": 284222.5,
"occurredAt": "",
"changeInPeriodTickets": 0,
"changeInPeriodRevenue": 0,
"eopAdvanceTickets": 11407,
"eopAdvanceRevenue": 284222.5
},
{
"soldTickets": 0,
"soldRevenue": 0,
"playedOffTickets": 112,
"playedOffRevenue": 3151.5,
"advanceTickets": 0,
"advanceRevenue": 0,
"occurredAt": "2022-01-14T00:00:00.000",
"changeInPeriodTickets": -112,
"changeInPeriodRevenue": -3151.5,
"eopAdvanceTickets": 11295,
"eopAdvanceRevenue": 281071
},
{
"soldTickets": 0,
"soldRevenue": 0,
"playedOffTickets": 392,
"playedOffRevenue": 13592,
"advanceTickets": 0,
"advanceRevenue": 0,
"occurredAt": "2022-01-09T00:00:00.000",
"changeInPeriodTickets": -392,
"changeInPeriodRevenue": -13592,
"eopAdvanceTickets": 10903,
"eopAdvanceRevenue": 267479
},
{
"soldTickets": 0,
"soldRevenue": 0,
"playedOffTickets": 502,
"playedOffRevenue": 18415.5,
"advanceTickets": 0,
"advanceRevenue": 0,
"occurredAt": "2022-01-08T00:00:00.000",
"changeInPeriodTickets": -502,
"changeInPeriodRevenue": -18415.5,
"eopAdvanceTickets": 10401,
"eopAdvanceRevenue": 249063.5
}
];
const arr = [
{
"soldTickets": 0,
"soldRevenue": 0,
"playedOffTickets": 0,
"playedOffRevenue": 0,
"advanceTickets": 11407,
"advanceRevenue": 284222.5,
"occurredAt": "",
"changeInPeriodTickets": 0,
"changeInPeriodRevenue": 0,
"eopAdvanceTickets": 11407,
"eopAdvanceRevenue": 284222.5
},
{
"soldTickets": 0,
"soldRevenue": 0,
"playedOffTickets": 112,
"playedOffRevenue": 3151.5,
"advanceTickets": 0,
"advanceRevenue": 0,
"occurredAt": "2022-01-14T00:00:00.000",
"changeInPeriodTickets": -112,
"changeInPeriodRevenue": -3151.5,
"eopAdvanceTickets": -112,
"eopAdvanceRevenue": -3151.5
},
{
"soldTickets": 0,
"soldRevenue": 0,
"playedOffTickets": 392,
"playedOffRevenue": 13592,
"advanceTickets": 0,
"advanceRevenue": 0,
"occurredAt": "2022-01-09T00:00:00.000",
"changeInPeriodTickets": -392,
"changeInPeriodRevenue": -13592,
"eopAdvanceTickets": -392,
"eopAdvanceRevenue": -13592
},
{
"soldTickets": 0,
"soldRevenue": 0,
"playedOffTickets": 502,
"playedOffRevenue": 18415.5,
"advanceTickets": 0,
"advanceRevenue": 0,
"occurredAt": "2022-01-08T00:00:00.000",
"changeInPeriodTickets": -502,
"changeInPeriodRevenue": -18415.5,
"eopAdvanceTickets": -502,
"eopAdvanceRevenue": -18415.5
}
];
const totals = {} // store running totals in here
const cumulatedArr = arr.map(({ occurredAt, ...props }) => ({
occurredAt,
...Object.fromEntries(Object.entries(props).map(([ key, val ]) => [
key,
totals[key] = (totals[key] ?? 0) + val // value is the result of the assignment
]))
}))
console.log(cumulatedArr)
如何实现只计算两个属性?我究竟做错了什么?提前致谢。
【问题讨论】:
标签: javascript arrays object ecmascript-6