2015-06-19 51 views
-1

我有以下對象:添加新的元素,基於比較的對象

var empAry= [{"empid":"101","name":"David"},{"empid":"102","name":"Sam"}..];//2000 records 

var empAry2= [{"empid":"101","name":"David"},{"empid":"105","name":"Kevin"},{"empid":"109","name":"Robert"},{"empid":"110","name":"Rob"}..];//30000 records 

我需要根據特定記錄的可用性新元素添加到empAry對象並填充新的元素值empAry2

預期輸出: -

empAry= [{"empid":"101","name":"David", **"FounInempAry2":"Yes"**},{"empid":"102","name":"Sam", **"FounInempAry2":"No"}**..];//2000 records 

如果我們可以通過jQuery的做到這一點,將是不錯的。請幫幫我。

+0

你能分享一下你迄今爲止嘗試過的嗎? – Dhiraj

+0

你有試過什麼嗎? – bhspencer

回答

0

試試這個:

var entry = {"empid":"<some id>","name":"<some name>"} 
var filter = empAry2.filter(function(o){ 
return o.empid==entry.empid; 
}); 
entry.FounInempAry2=(filter && filter.length>0)?"Yes":"No"; 
empAry2.push(entry); 

或者

var entry = {"empid":"<some id>","name":"<some name>","FounInempAry2":"No"} 
for(var i=0,length=empAry2.length;i<length;i++){ 
if(empAry2[i].empid==entry.empid){ 
entry.FounInempAry2="Yes"; 
break; 
} 
} 
empAry2.push(entry); 
1

很難做出什麼FounInempAry2是因爲對象結構是兩個樣品中相同的意義。我將假設存在其他屬性,並將使用jQuery $.extend()來「合併」這些屬性。

首先,它可能是最有效的循環一次大數組,並使用empid作爲關鍵字創建一個對象。

var tmp = {}; 
$.each(empAry2, function(_, item){ 
    tmp[ item.empid ] = item; 
}); 

這產生像的對象:通過第一陣列

{ 
    "101" : {"empid":"101","name":"David"}, 
    "102" : {"empid":"102","name":"Sam"} 
} 

現在環路並與無論是在在tmp對象

$.each(empAry, function(_, item){ 
    $.extend(item, tmp[ item.empid ]); 
}); 

參考匹配對象延伸:$.extend() Docs

+0

謝謝charlietfl!它按預期工作。 – user2565735