2017-02-13 7 views
1

zusammengeführt werden Ich habe zwei Arrays von Javascript-Objekten und möchten die Eigenschaften der beiden Javascript-Objekte mit identischen "ObjID" in ein Javascript-Objekt zusammenführen.Wie zwei json-Objektwerte durch ID mit plain Javascript (ES6)

Zum Beispiel:

// Array of Javascript Objects 1: 
let request1 = [{"ObjId":174864,"ObjMutationD":"2010-07-09T00:00:00.000Z","ObjMitarbeiterS":"epf","ObjAufId":142}, 
{"ObjId":175999,"ObjMutationD":"2010-07-09T00:00:00.000Z","ObjMitarbeiterS":"epf","ObjAufId":149}] 

// Array of Javascript Objects 2: 
let request2 = [{"ObjId":174864,"MulPfadS":"M:\\Originalbilder\\FGS\\95nn","MulDateiS":"9576.305-034-1","MulExtentS":"jpg"}, 
{"ObjId":177791,"MulPfadS":"M:\\Originalbilder\\FGS\\95nn","MulDateiS":"9576.305-035-1","MulExtentS":"jpg"}] 

Merge in ein Javascript-Objekt mit den Werten derselben ObjId (siehe ObjID: 174.864) und den Rest (der Objekte) bleibt unberührt:

let result = [{"ObjId":174864,"ObjMutationD":"2010-07-09T00:00:00.000Z","ObjMitarbeiterS":"epf","ObjAufId":142, 
"MulPfadS":"M:\\Originalbilder\\FGS\\95nn","MulDateiS":"9576.305-034-1","MulExtentS":"jpg"}, 
{"ObjId":175999,"ObjMutationD":"2010-07-09T00:00:00.000Z","ObjMitarbeiterS":"epf","ObjAufId":149}, 
{"ObjId":177791,"MulPfadS":"M:\\Originalbilder\\FGS\\95nn","MulDateiS":"9576.305-035-1","MulExtentS":"jpg"}] 

Was ich bisher versucht:

let request1 = [{"ObjId":174864,"ObjMutationD":"2010-07-09T00:00:00.000Z","ObjMitarbeiterS":"epf","ObjAufId":142}, 
{"ObjId":175999,"ObjMutationD":"2010-07-09T00:00:00.000Z","ObjMitarbeiterS":"epf","ObjAufId":149}] 

let request2 = [{"ObjId":174864,"MulPfadS":"M:\\Originalbilder\\FGS\\95nn","MulDateiS":"9576.305-034-1","MulExtentS":"jpg"}, 
{"ObjId":177791,"MulPfadS":"M:\\Originalbilder\\FGS\\95nn","MulDateiS":"9576.305-035-1","MulExtentS":"jpg"}] 

function joinObjects() { 
    var idMap = {}; 
    for(let i = 0; i < arguments.length; i++) { 
    for(let j = 0; j < arguments[i].length; j++) { 
     let currentID = arguments[i][j]['ObjId']; 
     if(!idMap[currentID]) { 
      idMap[currentID] = {}; 
     } 
     // Iterate over properties of objects in arrays 
     for(key in arguments[i][j]) { 
      idMap[currentID][key] = arguments[i][j][key]; 
     } 
    } 
    } 

    // push properties of idMap into an array 
    let newArray = []; 
    for(property in idMap) { 
    newArray.push(idMap[property]); 
    } 
    return newArray; 
} 

let result = joinObjects(request1, request2); 
+2

Bitte zeigen Sie uns, was Sie bisher versucht haben. – jeffdill2

+1

Für Starter ist dies kein json, das ein String-Datenübertragungsformat ist. Es gibt kein * json-Objekt *. Sie haben Javascript-Arrays mit JavaScript-Objekten – charlietfl

+0

@NinaScholz ok das Ergebnis Array behoben. – StandardNerd

Antwort

2

Sie Map und Object.assign für die Zusammenführung der Objekte nutzen könnten.

var request1 = [{ ObjId: 174864, ObjMutationD: "2010-07-09T00:00:00.000Z", ObjMitarbeiterS: "epf", ObjAufId: 142 }, { ObjId: 175999, ObjMutationD: "2010-07-09T00:00:00.000Z", ObjMitarbeiterS: "epf", ObjAufId: 149 }], 
 
    request2 = [{ ObjId: 174864, MulPfadS: "M:\\Originalbilder\\FGS\\95nn", MulDateiS: "9576.305-034-1", MulExtentS: "jpg" }, { ObjId: 177791, MulPfadS: "M:\\Originalbilder\\FGS\\95nn", MulDateiS: "9576.305-035-1", MulExtentS: "jpg" }], 
 
    result = [...[request1, request2].reduce((m, a) => (a.forEach(o => m.has(o.ObjId) && Object.assign(m.get(o.ObjId), o) || m.set(o.ObjId, o)), m), new Map).values()]; 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

in ES6 wird die Ausbreitung Betreiber das für Sie tun

var merged = {...request1[0], ...request2[0]}; 

Mehr Infos hier: https://davidwalsh.name/merge-objects

+0

Spread berücksichtigt nicht den Schlüssel (in meinem Fall "ObjId") durch Zusammenführen – StandardNerd

Verwandte Themen