2016-05-27 5 views
0

を組み合わせる:私は、次の2つのオブジェクトを持つ2つの多次元配列の内側の値

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" 
    } 
    ] 
}; 

私は次のようになります1つのオブジェクトにそれらを結合する必要があります。

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" 
    } 
    ] 
} 

メールメッセージのグループを識別するメッセージは同じです。

+0

は*両方*ない結果リストの 'USER3する@ yahoo.com'です'array1'と' array2'ですか? – iulian

+0

はい、[email protected]ノードのみを組み合わせてください – dadidaochieng

答えて

3

まず、各オブジェクトからキーを取得します。次に、両方のオブジェクトに存在する電子メールごとに、それらのリストを連結します。

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]); 
    } 
}); 

あなたarray1array2array3変数が実際のオブジェクトではなく配列であることに注意してください。私はあなたがこのコードを読む他の人(またはあなた、後で)を混乱させないようにあなたの名前を変更することをお勧めします。

+0

ありがとうございます。魔法のように働く。ええ、オブジェクトに名前を変更しています – 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

使用したいように、この組み合わせ

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

質問にアンダースコアタグはありませんので、vanilla-jsの回答を与える必要があります。 :) – Shilly

0

を強調する:それは中に存在しないため

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); 
関連する問題