我有一個物件陣列,我想用累積值更新這些物件中的兩個屬性。這個想法是僅累積計算兩個屬性(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)
我怎樣才能實作只計算兩個屬性?我究竟做錯了什么?提前致謝。
uj5u.com熱心網友回復:
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 result = arr.map((obj, index, self) => {
if (index == 0) return obj;
const prevO = self[index - 1]
obj.eopAdvanceTickets = prevO.eopAdvanceTickets;
obj.eopAdvanceRevenue = prevO.eopAdvanceRevenue;
return obj
});
console.log(result)
uj5u.com熱心網友回復:
也許這就是你要找的?
const arr = [
{
"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
},
{
"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": 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": 0,
"playedOffRevenue": 0,
"advanceTickets": 11407,
"advanceRevenue": 284222.5,
"occurredAt": "",
"changeInPeriodTickets": 0,
"changeInPeriodRevenue": 0,
"eopAdvanceTickets": 11407,
"eopAdvanceRevenue": 284222.5
}
];
const sums = {eopAdvanceTickets:0, eopAdvanceRevenue:0};
arr.forEach(c=>{for (p in sums) sums[p] =c[p]})
console.log(sums)
uj5u.com熱心網友回復:
另一種解決方案
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 [initial, ...tail] = arr;
const result = tail.reduce((acc, obj) => {
const
eopAdvanceTickets = acc.at(-1).eopAdvanceTickets obj.eopAdvanceTickets,
eopAdvanceRevenue = acc.at(-1).eopAdvanceRevenue obj.eopAdvanceRevenue,
newObj = { ...obj, eopAdvanceTickets, eopAdvanceRevenue };
return [...acc, newObj]
}, [initial]);
console.log(result);
.as-console-wrapper {max-height: 100% !important; top: 0}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/411921.html
標籤:
下一篇:根據輸入值過濾未知的深層嵌套陣列
