2017-09-15 5 views
-1

2 배열이 있는데 첫 번째 배열의 객체에서 ID와 일치하는 배열 객체를 두 번째 배열에서 찾으려고합니다. 거기에서 기본 객체에 일치하는 객체를 추가해야합니다. 또한 키 값으로 상위 3 개의 일치하는 객체 만 가져와야합니다. 나는 Underscore로 시도했지만 일치하는 배열 만 병합합니다. Heres는 나가 달성 할 필요가있다, 어떤 도움든지 중대 할.값을 일치시키고 기본 배열로 병합하여 보조 배열을 검색합니다.

var primaryArray = [ 
    { 
    "Name": "Main 1", 
    "Id": "1" 
    }, 
    { 
    "Name": "Main 2", 
    "Id": "2" 
    } 
] 


var secondaryArray = [ 
    { 
    "name": "Person 1", 
    "mainitemId": "1", 
    "count": 120 
    }, 
    { 
    "name": "Person 2", 
    "mainitemId": "1", 
    "count": 80 
    }, 
    { 
    "name": "Person 3", 
    "mainitemId": "1", 
    "count": 125 
    }, 
    { 
    "name": "Person 4", 
    "mainitemId": "1", 
    "count": 130 
    }, 
    { 
    "name": "Person 5", 
    "mainitemId": "2", 
    "count": 90 
    }, 
    { 
    "name": "Person 6", 
    "mainitemId": "2", 
    "count": 85 
    }, 
    { 
    "name": "Person 7", 
    "mainitemId": "2", 
    "count": 105 
    }, 
    { 
    "name": "Person 8", 
    "mainitemId": "2", 
    "count": 110 
    } 
] 


var resultArray = [ 
    { 
    "Name": "Main 1", 
    "Id": 1, 
    "people": [ 
     { 
     "name": "Person 4", 
     "mainitemId": "1", 
     "count": 130 
     }, 
     { 
     "name": "Person 3", 
     "mainitemId": "1", 
     "count": 125 
     }, 
     { 
     "name": "Person 1", 
     "mainitemId": "1", 
     "count": 120 
     } 
    ] 
    }, 
    { 
    "Name": "Main 2", 
    "Id": 2, 
    "people": [ 
     { 
     "name": "Person 8", 
     "mainitemId": "2", 
     "count": 110 
     }, 
     { 
     "name": "Person 7", 
     "mainitemId": "2", 
     "count": 105 
     }, 
     { 
     "name": "Person 5", 
     "mainitemId": "2", 
     "count": 90 
     } 
    ] 
    } 
] 
+0

당신이 시도 것을 ? –

+1

여러 가지를 찾고, 배열을 병합하고, 객체 값으로 검색하고, 가능하면 상위 3을 결정하기 위해 정렬합니다 (** 무엇이 top3을 결정합니까? **). 웹에는 각 부분을 수행하는 방법에 대한 많은 예제가 있습니다. 하나를 선택하여 사용해보십시오. 코드에 문제가있는 경우 여기에 게시하고 살펴보십시오. 또한 [** 좋은 질문을하는 법 **] (https://stackoverflow.com/help/how-to-ask)을 참조하십시오. 해당되는 경우 문제가있는 코드를 사용하십시오. [* * 최소, 완전하고 검증 가능한 예제를 만드는 방법 **] (https://stackoverflow.com/help/mcve) – Nope

답변

0

당신이 값을 기준으로 상위 3 개를 얻고 싶은 경우에, 그것이 있어야 ...

var result = primaryArray.map(item => { 
    item.people = secondaryArray.filter(peop => peop.mainitemId === item.Id) 
           .sort((a, b) => b.count - a.count) 
           .slice(0, 3); 
    return item;   
}) 

최종 결과 :

enter image description here

+0

감사합니다. Faly는 완벽하고 두통을 덜어주었습니다. _ map> _. extend> _. findWhere하지만 내가 필요한 결과의 첫 부분을 제공하지 못했습니다! – dbach

+0

당신을 진심으로 환영합니다! – Faly