2017-03-15 1 views
2

packages이라는 객체 배열이 있습니다. 각 개체에는 개체의 다른 배열 인 modules이라는 속성이 있습니다. 각 modules 배열의 각 개체에는 고유 한 ID가 있습니다. ID를 사용하여 모든 modules 배열의 각 고유 객체를 단일 배열로 저장하려고합니다.JavaScript - 중첩 된 여러 배열의 모든 객체를 고유 한 객체 배열에 추가하는 방법

packages = [ 
    { id: 1, modules:[{ id: 1, name: 'module1' }, { id: 2, name: 'module2' }]}, 
    { id: 2, modules:[{ id: 1, name: 'module1' }, { id: 3, name: 'module3' }]}, 
    { id: 3, modules:[{ id: 2, name: 'module2' }, { id: 4, name: 'module4' }]} 
]; 

나는 것으로 결과가 필요 내가 ES6를 타이프 ​​라이터를 사용하지만, 아니에요

allModules = [ 
    { id: 1, name: 'module1' }, 
    { id: 2, name: 'module2' }, 
    { id: 3, name: 'module3' }, 
    { id: 4, name: 'module4' } 
]; 

.

+0

멋진. 그래서 무엇을 시도 했습니까? http://stackoverflow.com/help/mcve – naomik

+1

'package' 정의에서 4 번째 줄에는 {id : 1, name : 'module4'}가 있습니다. 나는 이것이'id : 4'라고 생각 하나? 그러나 모듈 ID가 모두 모듈에 고유 한 경우 배열에 이름과 ID가있는 객체를 저장하는 대신 키와 이름 값으로 id를 사용하는 연관 배열을 사용하는 것이 더 쉽습니다. –

+0

@PeretteBarella 감사합니다. 오타를 수정했습니다. – kennypowers

답변

3

당신은 독특한 모듈의 목록을 얻을 수 reducefilter 같은 배열 방법을 사용할 수 있습니다

var packages = [ 
 
    { id: 1, modules:[{ id: 1, name: 'module1' }, { id: 2, name: 'module2' }]}, 
 
    { id: 2, modules:[{ id: 1, name: 'module1' }, { id: 3, name: 'module3' }]}, 
 
    { id: 3, modules:[{ id: 2, name: 'module2' }, { id: 4, name: 'module4' }]} 
 
] 
 

 
var result = packages.reduce(function (a, e) { 
 
    return a.concat(e.modules) 
 
}, []).filter(function (e) { 
 
    return !this[e.id] && (this[e.id] = true) 
 
}, {}) 
 

 
console.log(result)

+1

부탁드립니다. – kennypowers