2016-04-27 7 views
3

Ich habe ein Array mit dem Namen als commondataWie Objekte mit demselben Schlüssel in Javascript zusammenführen?

commondata = [{ 
    giverUser: 'Abc', 
    createdAt: '2016 11: 48: 40', 
    note: 'Test' 
}, { 
    giverUser: 'Xyz', 
    createdAt: '12: 22: 37', 
    note: 'Test data' 
}, { 
    giverUser: 'Abc', 
    createdAt: '2016 14: 22: 07', 
    note: '"test123"' 
}]; 

Wenn ich versuche, mit folgendem Code die obige Anordnung von Objekt zu verschmelzen, ich bin immer gleiche Anordnung, wie es ist.

Unten ist mein Code:

commondata.forEach(function(a, i) { 

    if (!this[a.giverUser]) { 

    this[a.giveruser] = { 
     giverUser: a.giverUser, 
     createdAt: [], 
     note: [] 
    }; 
    r_grouped.push(this[a.giveruser]); 
    } 

    this[a.giveruser].createdAt = this[a.giveruser].createdAt.concat(a.createdAt); 
    this[a.giveruser].note = this[a.giveruser].note.concat(a.note); 
}, Object.create(null)); 

Was in obigem Code falsch? Warum bekomme ich kein Merger-Array mit demselben Geberus?

+0

Sie könnten 'reduce' und' object.assign' verwenden. – evolutionxbox

+0

Ihre Antwort ist bereits hier drin. http://StackOverflow.com/Questions/171251/How-Can-Imerge-Properties-of-Two-Javascript-Objects-dynamisch – DININDU

+0

oh, aber was ist falsch in oben genannten Code? – Akki

Antwort

6

Sie haben einige Fehler mit giverusergiverUser

Rest ist adaequat

this[a.giverUser].createdAt = this[a.giverUser].createdAt.concat(a.createdAt); 

th

var commondata = [{ giverUser: 'Abc', createdAt: '2016 11:48:40', note: 'Test' }, { giverUser: 'Xyz', createdAt: '12:22:37', note: 'Test data' }, { giverUser: 'Abc', createdAt: '2016 14:22:07', note: '"test123"' }], 
 
    r_grouped = []; 
 

 
commondata.forEach(function (a, i) { 
 
    if (!this[a.giverUser]) { 
 
     this[a.giverUser] = { giverUser: a.giverUser, createdAt: [], note: [] }; 
 

 
     r_grouped.push(this[a.giverUser]); 
 
    } 
 
    this[a.giverUser].createdAt.push(a.createdAt); 
 
    this[a.giverUser].note.push(a.note); 
 
}, Object.create(null)); 
 

 
document.write('<pre>' + JSON.stringify(r_grouped, 0, 4) + '</pre>');

Just another Anmerkung sollte

Ist nicht notwendig, wenn der Wert kein Array ist. Sie können stattdessen drücken.

this[a.giverUser].createdAt.push(a.createdAt); 
Verwandte Themen