Javascript 比较2个数组值仅推送第一个结果
我有一个数组,我需要比较它的值-如果有重复-我想将它们存储在数组中,例如:Javascript 比较2个数组值仅推送第一个结果,javascript,ecmascript-5,Javascript,Ecmascript 5,我有一个数组,我需要比较它的值-如果有重复-我想将它们存储在数组中,例如: obj1 = [{"manager_id":1,"name":"john"},{"manager_id":1,"name":"kile"}, {"manager_id":2,"name":"kenny"}, {"manager_id":4,"name":"stan"}] obj2 = [{"employees_id":1,"name":"dan"}, {"employees_id":1,"name":"ben
obj1 = [{"manager_id":1,"name":"john"},{"manager_id":1,"name":"kile"},
{"manager_id":2,"name":"kenny"},
{"manager_id":4,"name":"stan"}]
obj2 = [{"employees_id":1,"name":"dan"},
{"employees_id":1,"name":"ben"},{"employees_id":1,"name":"sarah"},
{"employees_id":2,"name":"kelly"}]
如果“经理id”=“员工id”-则结果为:
// {1:[{"manager_id":1,"name":"john"},{"manager_id":1,"name":"kile"},
{"employees_id":1,"name":"dan"}, {"employees_id":1,"name":"ben"},
{"employees_id":1,"name":"sarah"}]};
我试过:
var obj1=[{
“经理id”:1,
“姓名”:“约翰”
}, {
“经理id”:1,
“名称”:“基尔”
}, {
“经理id”:2,
“姓名”:“肯尼”
}, {
“经理id”:4,
“姓名”:“斯坦”
}];
变量obj2=[{
“员工id”:1,
“姓名”:“丹”
}, {
“员工id”:1,
“姓名”:“本”
}, {
“员工id”:1,
“姓名”:“莎拉”
}, {
“员工id”:2,
“姓名”:“凯利”
}];
var res=obj1.concat(obj2).reduce(函数r,o){
r[o.manager_id]=r[o.employees_id]| |[];
r[o.manager\u id]。推送(o);
返回r;
}, {});
console.log(res);
。作为控制台包装器{
最大高度:100%!重要;
排名:0;
}
r[o.manager_id]=r[o.employees_id]| |[];
在此语句中,如果经理没有员工id,则会重置该id的数组
一个正确的方法是:
var res = obj1.concat(obj2).reduce(function(r, o) {
var id;
if(o.hasOwnProperty('manager_id')) {
id = o['manager_id'];
}
else {
id = o['employees_id'];
}
r[id] = r[id] || [];
r[id].push(o);
return r;
}, {});
r[o.manager_id]=r[o.employees_id]| |[];
在此语句中,如果经理没有员工id,则会重置该id的数组
一个正确的方法是:
var res = obj1.concat(obj2).reduce(function(r, o) {
var id;
if(o.hasOwnProperty('manager_id')) {
id = o['manager_id'];
}
else {
id = o['employees_id'];
}
r[id] = r[id] || [];
r[id].push(o);
return r;
}, {});
问题在于这一行:
r[o.manager_id] = r[o.employees_id] || [];
var itemId = o.manager_id || o.employees_id;
您应该记住,数组中的某些对象具有manager\u id
,而另一些对象则没有,它们具有employees\u id
,因此您必须首先使用以下行进行评估:
r[o.manager_id] = r[o.employees_id] || [];
var itemId = o.manager_id || o.employees_id;
请尝试以下代码:
var res = obj1.concat(obj2).reduce(function(r, o) {
var itemId = o.manager_id || o.employees_id;
r[itemId] = r[itemId] || [];
r[itemId].push(o);
return r;
}, {});
问题在于这一行:
r[o.manager_id] = r[o.employees_id] || [];
var itemId = o.manager_id || o.employees_id;
您应该记住,数组中的某些对象具有manager\u id
,而另一些对象则没有,它们具有employees\u id
,因此您必须首先使用以下行进行评估:
r[o.manager_id] = r[o.employees_id] || [];
var itemId = o.manager_id || o.employees_id;
请尝试以下代码:
var res = obj1.concat(obj2).reduce(function(r, o) {
var itemId = o.manager_id || o.employees_id;
r[itemId] = r[itemId] || [];
r[itemId].push(o);
return r;
}, {});
@abnikr7谢谢-搞定了!@RoyBarOn没问题!请你解释一下:r[id]=r[id]| |【】;它代表什么?如果没有定义,谢谢是初始化数组的id。@abnikr7谢谢-搞定了!@RoyBarOn没问题!你介意解释一下:r[id]=r[id]|【】;它代表什么?thanksIt是为id初始化数组(如果未定义)。