gpt4 book ai didi

javascript - 如何对两个键必须匹配的数组求和,如 Excel Pivot?

转载 作者:行者123 更新时间:2023-12-05 03:31:14 24 4
gpt4 key购买 nike

我尝试对所有“Datum”和“Material”必须匹配的“Menge”和“Fehler”值求和。结果应该类似于 Excel 数据透视表。

到目前为止,这是我的代码,但我不知道如何添加也必须匹配的第二个键“ Material ”。我希望你能理解我试图解释的内容。

var arr = [{
"Datum": {
"date": "2000-01-01 00:00:00.000000",
"timezone_type": 3,
"timezone": "Europe/Berlin"
},
"Material": "123",
"Menge": 100,
"Fehler": 5
}, {
"Datum": {
"date": "2000-01-01 00:00:00.000000",
"timezone_type": 3,
"timezone": "Europe/Berlin"
},
"Material": "123",
"Menge": 5,
"Fehler": 1
}, {
"Datum": {
"date": "2000-01-01 00:00:00.000000",
"timezone_type": 3,
"timezone": "Europe/Berlin"
},
"Material": "123",
"Menge": 6,
"Fehler": 65
}, {
"Datum": {
"date": "2000-01-01 00:00:00.000000",
"timezone_type": 3,
"timezone": "Europe/Berlin"
},
"Material": "222",
"Menge": 10,
"Fehler": 5
}, {
"Datum": {
"date": "2000-01-02 00:00:00.000000",
"timezone_type": 3,
"timezone": "Europe/Berlin"
},
"Material": "444",
"Menge": 29,
"Fehler": 1
}, {
"Datum": {
"date": "2000-01-02 00:00:00.000000",
"timezone_type": 3,
"timezone": "Europe/Berlin"
},
"Material": "123",
"Menge": 1,
"Fehler": 1
}]

const result = Object.values(arr.reduce((acc, obj) => {
const [Datum] = obj.Datum.date.split(' ');
const Menge = (acc[Datum] ?.Menge + obj.Menge) || obj.Menge;
const Fehler = (acc[Datum] ?.Fehler + obj.Fehler) || obj.Fehler;
acc[Datum] = {
Datum,
Menge,
Fehler
};
return acc;
}, {}));

console.log(result)

但结果应该是这样的:

[{
"Datum": "2000-01-01",
"Material": "123",
"Menge": 111,
"Fehler": 71
},
{
"Datum": "2000-01-01",
"Material": "222",
"Menge": 10,
"Fehler": 5
},
{
"Datum": "2000-01-02",
"Material": "444",
"Menge": 29,
"Fehler": 1
},
{
"Datum": "2000-01-02",
"Material": "123",
"Menge": 1,
"Fehler": 1
}
]

非常感谢

最佳答案

您需要一个包含DatumMaterial 的组合键。

const
data = [{ Datum: { date: "2000-01-01 00:00:00.000000", timezone_type: 3, timezone: "Europe/Berlin" }, Material: "123", Menge: 100, Fehler: 5 }, { Datum: { date: "2000-01-01 00:00:00.000000", timezone_type: 3, timezone: "Europe/Berlin" }, Material: "123", Menge: 5, Fehler: 1 }, { Datum: { date: "2000-01-01 00:00:00.000000", timezone_type: 3, timezone: "Europe/Berlin" }, Material: "123", Menge: 6, Fehler: 65 }, { Datum: { date: "2000-01-01 00:00:00.000000", timezone_type: 3, timezone: "Europe/Berlin" }, Material: "222", Menge: 10, Fehler: 5 }, { Datum: { date: "2000-01-02 00:00:00.000000", timezone_type: 3, timezone: "Europe/Berlin" }, Material: "444", Menge: 29, Fehler: 1 }, { Datum: { date: "2000-01-02 00:00:00.000000", timezone_type: 3, timezone: "Europe/Berlin" }, Material: "123", Menge: 1, Fehler: 1 }],
result = Object.values(data.reduce((acc, { Datum: { date }, Material, Menge, Fehler }) => {
const
Datum = date.slice(0, 10),
key = [Datum, Material].join('|');

acc[key] ??= { Datum, Material, Menge: 0, Fehler: 0 };
acc[key].Menge += Menge,
acc[key].Fehler += Fehler;

return acc;
}, {}));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 如何对两个键必须匹配的数组求和,如 Excel Pivot?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70708103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com