2017-12-27 106 views
1

我有一个数组,我需要比较它的价值观 - 如果有重复的 - 我想将它们存储在阵列,例如:比较2个阵列值推只有第一个结果

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"}] 

如果“manger_id “===” employees_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 = [{ 
 
    "manager_id": 1, 
 
    "name": "john" 
 
}, { 
 
    "manager_id": 1, 
 
    "name": "kile" 
 
}, { 
 
    "manager_id": 2, 
 
    "name": "kenny" 
 
}, { 
 
    "manager_id": 4, 
 
    "name": "stan" 
 
}]; 
 

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

 
var res = obj1.concat(obj2).reduce(function(r, o) { 
 

 
    r[o.manager_id] = r[o.employees_id] || []; 
 
    r[o.manager_id].push(o); 
 

 

 
    return r; 
 
}, {}); 
 

 

 
console.log(res);
.as-console-wrapper { 
 
    max-height: 100% !important; 
 
    top: 0; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div></div>

正如你可以的“经理标识”的结果不说 - 只有一个 - 时应该有更多的

如果MANAGER_ID === employees_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"}]}; 

正如你可以看到有几个共同的id

回答

3

r[o.manager_id] = r[o.employees_id] || [];在此声明,如果管理者没有一个EMPLOYEE_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; 
}, {}); 
+0

@ abnikr7谢谢 - 钉了它! – RoyBarOn

+0

@RoyBarOn没问题! – abhikr7

+0

你会介意解释一下:r [id] = r [id] || [];它代表什么?谢谢 – RoyBarOn

2

问题依赖于这一行:

r[o.manager_id] = r[o.employees_id] || []; 

你应该记住,在你的阵列的一些对象具有manager_id和其他一些不,他们有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; 
}, {});