2017-03-15 4 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' }]} 
]; 

私がする結果を必要とする:

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

私はES6活字体を使用しますが、いませんよ。

+0

涼しいです。あなたは何を試しましたか? – 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

関連する問題