Warum tust du key = Object.keys(item)[0]; item=item[key]; ? Sie wissen bereits, der Name ist keyalso tu es einfach item.key oder objArr[i].key. Auch die Verwendung von [0] index gibt Ihnen nicht unbedingt immer die gleiche Eigenschaft.
– Benutzer2736012
7. Oktober 2013 um 19:50 Uhr
Danke, suche dasselbe,,
– Soumya Gangamwar
30. Oktober 2020 um 11:57 Uhr
Funktioniert es ohne die Zeichenfolgen zu zitieren, z Mon Sep 23 2013 00:00:00 GMT-0400?
– Peter Mortensen
Vor 18 Stunden
Hamms
Anstatt eine zu verwenden zum Loop- und Push-Werte, die Sie direkt verwenden können Karte und reduzieren:
let objArr = [
{key: 'Mon Sep 23 2013 00:00:00 GMT-0400', val: 42},
{key: 'Mon Sep 24 2013 00:00:00 GMT-0400', val: 78},
{key: 'Mon Sep 25 2013 00:00:00 GMT-0400', val: 23},
{key: 'Mon Sep 23 2013 00:00:00 GMT-0400', val: 54}
];
// first, convert data into a Map with reduce
let counts = objArr.reduce((prev, curr) => {
let count = prev.get(curr.key) || 0;
prev.set(curr.key, curr.val + count);
return prev;
}, new Map());
// then, map your counts object back to an array
let reducedObjArr = [...counts].map(([key, value]) => {
return {key, value}
})
console.log(reducedObjArr);
Kann mit map/reduce auch eine separate Zählung hinzugefügt werden. Beispiel: 23. September, Zählung ist 2, für 24. & 25. Zählung ist 1.
– Gunjan Anshul
10. Dezember 2020 um 9:03 Uhr
Ja! Du würdest einfach so etwas tun count + 1 anstatt curr.val + count in dem prev.set Forderung
– Hamms
10. Dezember 2020 um 23:03 Uhr
Benutzer2736012
Sie sollten jedes nicht gefundene Objekt mit seinem dem Ergebnis zuweisen .key Eigentum.
Wenn es gefunden wird, müssen Sie es hinzufügen .val.
var temp = {};
var obj = null;
for(var i=0; i < objArr.length; i++) {
obj=objArr[i];
if(!temp[obj.key]) {
temp[obj.key] = obj;
} else {
temp[obj.key].val += obj.val;
}
}
var result = [];
for (var prop in temp)
result.push(temp[prop]);
Ein Teil des Problems war auch, dass Sie die wiederverwendeten item Variable, um auf den Wert zu verweisen .keysodass Sie den Verweis auf das Objekt verloren haben.
mplungjan
Einfachere Reduzierung als an anderer Stelle gepostet, da kein Kartenelement verwendet wird
Dennoch wäre eine Erklärung angebracht. ZB auf welche Weise ist es einfacher? Was ist die Idee/der Kern? Aus dem Hilfecenter: “…erklären Sie immer, warum die von Ihnen vorgestellte Lösung angemessen ist und wie sie funktioniert”. Bitte antworten Sie, indem Sie Ihre Antwort bearbeiten (ändern), nicht hier in den Kommentaren (ohne “Bearbeiten:”, “Aktualisieren:” oder ähnliches – die Antwort sollte so aussehen, als wäre sie heute geschrieben).
– Peter Mortensen
Vor 18 Stunden
Es verwendet keine Karte. Aktualisiert. Es ist nur einfacher Code.
– mplungjan
Vor 17 Stunden
Nina Scholz
Sie könnten eine Hash-Tabelle für die Gruppierung nach verwenden key.
Ein anderer Ansatz besteht darin, alle Schlüssel/Wert-Paare in einem zu sammeln Map und formatieren Sie das endgültige Array mit Array.from und ein Callback für die Objekte.
var targetObj = {};
for (var i = 0; i < objArr.length; i++) {
if (!targetObj.hasOwnProperty(objArr[i].key)) {
targetObj[objArr[i].key] = 0;
}
targetObj[objArr[i].key] += objArr[i].val;
}
Unten ist eine andere Lösung, die nur eine Schleife verwendet (a während Schleife):
var arr2 = [];
var emri = "";
var value = 0;
var i = 1;
var j = 0;
while(arr1.length != 0) {
emri = arr1[0].name;
if(emri == arr1[i].name) {
value += arr1[i].value;
arr1.splice(i, 1);
i--;
}
i++;
if(i == arr1.length) {
value += arr1[0].value;
i = 1;
arr2[j] = {name:emri, value:value};
j++;
value = 0;
arr1.splice(0, 1);
}
}
OP will die gleichen Schlüssel/Wert-Paare, aber mit der val konsolidiert.
– Benutzer2736012
7. Oktober 2013 um 20:11 Uhr
Ungemindert
Man kann verwenden Array#reduce mit einem Objekt zum Speichern der Werte für jeden Schlüssel.
Warum tust du
key = Object.keys(item)[0]; item=item[key];
? Sie wissen bereits, der Name istkey
also tu es einfachitem.key
oderobjArr[i].key
. Auch die Verwendung von[0]
index gibt Ihnen nicht unbedingt immer die gleiche Eigenschaft.– Benutzer2736012
7. Oktober 2013 um 19:50 Uhr
Danke, suche dasselbe,,
– Soumya Gangamwar
30. Oktober 2020 um 11:57 Uhr
Funktioniert es ohne die Zeichenfolgen zu zitieren, z
Mon Sep 23 2013 00:00:00 GMT-0400
?– Peter Mortensen
Vor 18 Stunden