2017-12-27 5 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>
,313 (210)

는 "MANAGER_ID"의 결과가 추가되지 않습니다 수 있듯이 - 하나 -이 있어야 더

경우 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] || [];이 문에서 관리자가 배열이 해당 ID에 대해 재설정되고 된 employee_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] || []; 그것은 무엇을 의미합니까? thanks – RoyBarOn

2

: 당신의 배열의 일부 개체가 manager_id 및 기타가 있음을 염두에해야

r[o.manager_id] = r[o.employees_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; 
}, {});