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初始化数组(如果未定义)。