Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

249
Views
¿Cómo sumar valores de objeto por un valor clave que es un objeto de fecha?

Intento sumar todos los valores "Menge" y "Fehler" si el "Datum" es el mismo. El problema es que "Datum" es un objeto de fecha.

 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}] console.log(arr) var holder = {}; arr.forEach(function (d) { if (holder.hasOwnProperty(d.Datum)) { holder[d.Datum] = holder[d.Datum] + d.Menge; } else { holder[d.Datum] = d.Menge; } }); var obj2 = []; for (var prop in holder) { obj2.push({ Datum: prop, Menge: holder[prop] }); } console.log(obj2);

Pero el resultado debería ser:

 [ { "Datum": "2000-01-01", "Menge": 121, "Fehler": 76 }, { "Datum": "2000-01-02", "Menge": 30, "Fehler": 2 } ]
over 4 years ago · Santiago Trujillo
5 answers
Answer question

0

Si ignora la zona horaria y la parte de la hora, puede simplemente extraer la parte de la fecha como se muestra a continuación y usarla como la clave para el holder .

 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}] var holder = {}; arr.forEach(function (d) { const dateStr = d.Datum.date.substring(0, 10); if (holder.hasOwnProperty(dateStr)) { var existing = holder[dateStr]; holder[dateStr] = { Datum: dateStr, Menge: existing.Menge + d.Menge, Fehler: existing.Fehler + d.Fehler, }; } else { holder[dateStr] = { Datum: dateStr, Menge: d.Menge, Fehler: d.Fehler, }; } }); var obj2 = Object.values(holder); console.log(obj2);

over 4 years ago · Santiago Trujillo Report

0

Forma alternativa;

 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}] var Arrr = []; arr.forEach(function (d) { var dateArr = d.Datum.date.split(" "); if(Arrr.find(x=> x.Datum ===dateArr[0])) { Arrr.find(x=> x.Datum ===dateArr[0]).Fehler += d.Fehler; Arrr.find(x=> x.Datum ===dateArr[0]).Menge += d.Menge; } else { Arrr.push({ Datum: dateArr[0], Menge: d.Menge, Fehler:d.Fehler }); } }); console.log(Arrr);
over 4 years ago · Santiago Trujillo Report

0

Alternativamente, si su zona horaria tiene influencia, puede encadenar su Datum, así:

 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 }] var holder = new Map(); arr.forEach(function (d) { const strDatum = JSON.stringify(d.Datum); const current = holder.get(strDatum) || { Menge: 0, Fehler: 0}; holder.set(strDatum, { Menge: current.Menge + d.Menge, Fehler: current.Fehler + d.Fehler }); }); var obj2 = []; holder.forEach((value, key) => { obj2.push({ Datum: JSON.parse(key), Menge: value.Menge, Fehler: value.Fehler, }); }); console.log(obj2);

over 4 years ago · Santiago Trujillo Report

0

Tipo de forma ES6 y agrupación por solución hash:

 const 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; const Ratio = Fehler / Menge; acc[Datum] = { Datum, Menge, Fehler, Ratio }; return acc; }, {})); console.log(result);
 .as-console-wrapper{min-height: 100%!important; top: 0}

over 4 years ago · Santiago Trujillo Report

0

Sin usar JS split() o substring()

Use Date() para obtener sus resultados definidos. Solo tengo una sugerencia además de la respuesta de Udith . Puedes hacer algo como esto:

 // This can easily give you the results without even worrying for any substring stuff const date = new Date(obj.Datum.date)

Código definitivo:

 var dataArray = [{ "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 holder = {}; dataArray.forEach(obj => { // Using Date() of Javascript for converting the timestamp to a // a date object for better computation const objDate = new Date(obj.Datum.date); if(holder.hasOwnProperty(objDate)){ let existingData = holder[objDate]; holder[objDate] = { Datum: obj.Datum.date, Menge: existingData.Menge + obj.Menge, Fehler: existingData.Fehler + obj.Fehler }; }else{ holder[objDate] = { Datum: obj.Datum.date, Menge: obj.Menge, Fehler: obj.Fehler } } }); const resultObj = Object.values(holder); console.log(resultObj);

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!