I try to sum all “Menge” and “Fehler” values where “Datum” AND “Material” must match. The result should look like an Excel Pivot.
This is my code so far, but I don’t know how to add the second key “Material” that also must match . I hope you can understand what I try to explain.
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)
But the result should look like:
[{ "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 } ]
Thank you very much
Advertisement
Answer
You need a combined key with Datum
and Material
.
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; }