2017-04-07 7 views
1

두 배열이 있는데 하나의 객체로 병합하려고합니다. 내가 가진 것과 달성하고자하는 것에 대한 몇 가지 예를 들었습니다. 나는 _.union과 몇 가지 다른 밑줄 방법을 시도했다.각 객체에있는 속성의 고유 값을 포함하는 다른 배열 순서로 객체 배열을 정렬하는 방법은 무엇입니까?

var original = [ 
    { 
    Country: 'US', 
    value: '10' 
    }, 
    { 
    Country: 'Turkey', 
    value: '5' 
    } 
]; 

var newlist =["Afghanistan", "Antarctica","Turkey"] 

결과는 내가 원하는 다음 newlist 미국이 없기 때문에

var results= [ 
    { 
    Country: 'Afghanistan', 
    value: '0' 
    }, 
    { 
    Country: 'Antarctica', 
    value: '0' 
    }, 
    { 
    Country: 'Turkey', 
    value: '5' 
    } 
]; 

미국은 최종 결과에 표시하지 않을 것입니다. 기본적으로 새 목록의 모든 값은 원래 목록의 값으로 결과에 표시됩니다.

+1

코드 작성을 시도해 보셨습니까? – bhspencer

+0

은 _.union을 시도했지만 첫 번째 목록에 마지막 목록을 첨부합니다. 이것은 내가 원하는 것이 아닙니다. 나는 당신이 .merge를 할 수 있다는 것을 알았지 만 밑줄은 병합하지 않았습니다. –

+0

개체를 두 배열 모두 병합하려면 국가 : 'US'로 예상되는 출력에? – repzero

답변

5

비 밑줄 용액, 즉 .map()의 새로운 어레이가 별도로 새로운 객체 반환을 .find() 수 있으면 원래의 어레이로부터 객체를 반환 :

var original = [ 
 
    { Country: 'US', value: '10' }, 
 
    { Country: 'Turkey', value: '5' } 
 
]; 
 

 
var newlist =["Afghanistan", "Antarctica","Turkey"] 
 

 
var result = newlist.map(function(v) { 
 
    return original.find(function(o) { return o.Country === v }) 
 
     || { Country: v, value: '0' } 
 
}) 
 

 
console.log(result)

그것은의 것을 ES6 화살표 기능이있는 하나의 라이너 :

var original = [ 
 
    { Country: 'US', value: '10' }, 
 
    { Country: 'Turkey', value: '5' } 
 
]; 
 

 
var newlist =["Afghanistan", "Antarctica","Turkey"] 
 

 
var result = newlist.map(v => original.find(o => o.Country===v) || {Country:v, value:'0'}) 
 

 
console.log(result)

+0

굉장한 남자! 그것은 매력처럼 작동합니다! –