2016-05-27 17 views
0

Ich habe die folgenden zwei Objekte:Kombinieren von zwei inneren Werte multidimensionalen Arrays

var object1 = { 
    "[email protected]": [ 
    { 
     "status": "Unread", 
     "message": "Some message 1", 
     "senderId": "0063f297-0da6-4c23-9a53-0480c273d177", 
     "id": "088b71bc-5b64-4f09-bba4-cf88b3cc598e", 
     "time": "2016-05-13T10:30:11.495Z" 
    }, 
    { 
     "status": "Unread", 
     "message": "Some other message 2", 
     "senderId": "0063f297-0da6-4c23-9a53-0480c273d177", 
     "id": "39b2850b-d8ac-4d23-9fa6-e7056fb6c030", 
     "time": "2016-05-13T10:30:03.310Z" 
    } 
    ] 
}; 

var object2 = { 
    "[email protected]": [ 
    { 
     "message": "Some message 1", 
     "id": "088b71bc-5b64-4f09-bba4-cf88b3cc598e", 
     "time": "2016-05-13T10:30:11.495Z" 
    }, 
    { 
     "message": "Some other message 2", 
     "id": "39b2850b-d8ac-4d23-9fa6-e7056fb6c030", 
     "time": "2016-05-13T10:30:03.310Z" 
    } 
    ], 
    "[email protected]": [ 
    { 
     "message": "Some message 1", 
     "id": "088b71bc-5b64-4f09-bba4-cf88b3cc598e", 
     "time": "2016-05-13T10:30:11.495Z" 
    }, 
    { 
     "message": "Some other message 1", 
     "id": "39b2850b-d8ac-4d23-9fa6-e7056fb6c030", 
     "time": "2016-05-13T10:30:03.310Z" 
    } 
    ] 
}; 

ich sie zu einem einzigen Objekt kombinieren müssen, die etwa wie folgt aussieht:

var object3 = { 
    "[email protected]": [ 
    { 
     "status": "Unread", 
     "message": "Some message 1", 
     "senderId": "0063f297-0da6-4c23-9a53-0480c273d177", 
     "id": "088b71bc-5b64-4f09-bba4-cf88b3cc598e", 
     "time": "2016-05-13T10:30:11.495Z" 
    }, 
    { 
     "status": "Unread", 
     "message": "Some other message 2", 
     "senderId": "0063f297-0da6-4c23-9a53-0480c273d177", 
     "id": "39b2850b-d8ac-4d23-9fa6-e7056fb6c030", 
     "time": "2016-05-13T10:30:03.310Z" 
    }, 
    { 
     "message": "Some message 1", 
     "id": "088b71bc-5b64-4f09-bba4-cf88b3cc598e", 
     "time": "2016-05-13T10:30:11.495Z" 
    }, 
    { 
     "message": "Some other message 2", 
     "id": "39b2850b-d8ac-4d23-9fa6-e7056fb6c030", 
     "time": "2016-05-13T10:30:03.310Z" 
    } 
    ] 
} 

, wo die E-Mail Das Identifizieren der Gruppe von Nachrichten ist identisch.

+0

ist 'user3 @ yahoo.com' in der Ergebnisliste nicht, weil es nicht in ist * beide * 'array1' und' array2'? – iulian

+0

ja, kombinieren Sie nur [email protected] Knoten – dadidaochieng

Antwort

3

Zuerst erhalten Sie die Schlüssel von jedem Objekt. Verknüpfen Sie dann für jede E-Mail, die in beiden Objekten vorhanden ist, ihre Listen.

var keys1List = Object.getOwnPropertyNames(array1), 
    keys2List = Object.getOwnPropertyNames(array2), 
    result = {}; 

keys1List.forEach(function(email) { 
    if (keys2List.indexOf(email) > -1) { 
     result[email] = array1[email].concat(array2[email]); 
    } 
}); 

Beachten Sie, dass Ihre array1, array2 und array3 Variablen tatsächlich Objekte sind und nicht-Arrays. Ich würde vorschlagen, dass Sie ihre Namen ändern, damit sie andere Leute (oder auch Sie später), die diesen Code lesen, nicht verwirren werden.

+0

Vielen Dank. funktioniert wie Magie. Ja, ich benenne sie in Objekte um – dadidaochieng

2
var map = Object.keys(array1).reduce(function(map, email) { 
    map[email] = array1[email]; 
    if (array2.hasOwnProperty(email)) map[email] = map[email].concat(array2[email]); 
    return map; 
}, {}); 
-1

Verwendung Strich

_.mapObject(array1,function(val,key){ 
    return _.union(val,array2[key]); 
}) 
+4

Es gibt kein Unterstreichungs-Tag in der Frage, also sollten wir Vanille-js Antworten geben. :) – Shilly

0

dies wie Sie kombinieren wollen:

Object.combineArrays = function(obj1, obj2) { 
    var sizeA = 0, key, keyB; 
    for (key in obj2) { 
     if (obj1.hasOwnProperty(key) && obj2.hasOwnProperty(key)) { 
     for (keyB in obj2[key]) { 
      obj1['[email protected]'].push(obj2[key][keyB]); 
     } 
     sizeA++; 
     } 
    } 
    return obj1; 
}; 
var newObjects = Object.combineArrays(obj1, obj2); 
console.log(newObjects);