如果“基準”相同,我會嘗試將所有“Menge”和“Fehler”值相加。問題是“基準”是一個日期物件。
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);
但結果應該是:
[
{
"Datum": "2000-01-01",
"Menge": 121,
"Fehler": 76
},
{
"Datum": "2000-01-02",
"Menge": 30,
"Fehler": 2
}
]
uj5u.com熱心網友回復:
一種ES6方式和按哈希解決方案分組:
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, { Datum, Menge, Fehler }) => {
const [date] = Datum.date.split(' ');
acc[date] = {
Datum: date,
Menge: (acc[date]?.Menge Menge) || Menge,
Fehler: (acc[date]?.Fehler Fehler) || Fehler,
};
return acc;
}, {}));
console.log(result);
.as-console-wrapper{min-height: 100%!important; top: 0}
uj5u.com熱心網友回復:
如果您忽略時區和時間部分,您可以只提取如下日期部分并將其用作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);
uj5u.com熱心網友回復:
替代方式;
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);
uj5u.com熱心網友回復:
或者,如果您的時區有影響,您可以對 Datum 進行字串化,如下所示:
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);
uj5u.com熱心網友回復:
不使用 JS split() 或 substring()
使用Date()獲得您定義的結果。除了 Udith 的答案,我還有一個建議。你可以做這樣的事情:
// This can easily give you the results without even worrying for any substring stuff
const date = new Date(obj.Datum.date)
最終代碼:
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);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/409775.html
標籤:
