根据比较向对象添加新元素

时间:2015-06-19 19:56:46

标签: javascript jquery json

我有以下对象:

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做到这一点会很好。请帮帮我。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);