2017-12-26 31 views
2

2つのオブジェクトを比較し、同一のIDがある場合はオブジェクトを作成しようとしています。例えば2つのオブジェクトから同じ値でオブジェクトを作成するにはどうすればよいですか?

obj1 = [{"id":1,"name":"john"},{"id":2,"name":"kile"},{"id":3,"name":"kenny"}, 
{"id":4,"name":"stan"}] 

obj2 = [{"id":1,"name":"dan"},{"id":1,"name":"ben"},{"id":1,"name":"sarah"}, 
{"id":2,"name":"kelly"}] 

私が探している結果は次のとおりです。

result = [{1:{"id":1,"name":"john"},{"id":1,"name":"dan"}, 
    {"id":1,"name":"ben"},{"id":1,"name":"sarah"}, 

//both objects from obj1 & obj 2 which holds the same ID are now in new 
    object "1" - which is the id that's common to them// 

{2:{{"id":2,"name":"kile"}, 
{"id":2,"name":"kelly"}}}] 

より明確にするために:

  1. IDの
  2. に一致する両方のオブジェクトで検索それらを両方とも1つのオブジェクトに積み重ねると、新しいオブジェクトには一致するIDのオブジェクトが含まれますそれらの両方からの....

私が試した:

var obj_names_1 = [{"id":1,"name":"john"},{"id":2,"name":"kile"}, 
{"id":3,"name":"kenny"}, 
{"id":4,"name":"stan"}]; 

var obj_names_2 = [{"id":1,"name":"dan"},{"id":1,"name":"ben"}, 
{"id":1,"name":"sarah"}, 
{"id":2,"name":"kelly"}]; 

function getMessages(obj1, obj2){ 
    var messages_tab = []; 
    $.each(obj1, function(){ 

     var messages_wrap = this; 
     var recieved_messages_id = this.id; 
     $.each(obj2, function(){ 
      var sent_messages_id = this.id; 
      if(recieved_messages_id == sent_messages_id){ 


       messages_tab.push({1:[this,messages_wrap]}); // key 0 should 
       be the common id 

      } 

     }); 
    }); 
    return messages_tab; 
} 

console.log(getMessages(obj_names_1,obj_names_2)); 

をしかし、ここで最初の問題は、それはあなたが1つのを超える結果

Fiddle

+0

私は結果が有効ではないと思います。 – vibhor1997a

答えて

2

を押していないということですarray#concat両方の配列を使用して、同じidを持つ配列内のオブジェクトをプッシュするのにarray#reduceを使用します。

注:idに対応する値は配列でなければなりません。

var obj1 = [{"id":1,"name":"john"},{"id":2,"name":"kile"},{"id":3,"name":"kenny"},{"id":4,"name":"stan"}], 
 
    obj2 = [{"id":1,"name":"dan"},{"id":1,"name":"ben"},{"id":1,"name":"sarah"},{"id":2,"name":"kelly"}] 
 
    result = obj1.concat(obj2).reduce((r,o) => { 
 
     r[o.id] = r[o.id] || []; 
 
     r[o.id].push(o); 
 
     return r; 
 
    },{}); 
 

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

+1

ありがとうございます - 私はes6/5の機能ではあまり良くありません....しかし、私は今から学び始めます! – RoyBarOn

関連する問題