2016-04-12 7 views
0

オブジェクトをサブ値(型)で分割する必要があります。 のは、私は配列以下していると仮定しましょう:オブジェクトの配列をサブ値で複数のオブジェクト配列に分割する方法

[ 
    {id:1,name:"John",information: { type :"employee"}}, 
    {id:2,name:"Charles",information: { type :"employee"}}, 
    {id:3,name:"Emma",information: { type :"ceo"}}, 
    {id:4,name:"Jane",information: { type :"customer"}} 
] 

、私の最終的な結果がどのように見えるので、私はinformation.typeでオブジェクトを分割したい:

[ 
{ 
    type:"employee", 
    persons: 
    [ 
    {id:1,name:"John",information: { ... }}, 
    {id:2,name:"Charles",information: { ... } 
    ] 
}, 
{ 
    type:"ceo", 
    persons: 
    [ 
    {id:3,name:"Emma",information: { ... }} 
    ] 
}, 
{ 
    type:"customer", 
    persons: 
    [ 
    {id:4,name:"Jane",information: { ... }} 
    ] 
}, 
] 

下線は私のプロジェクトで利用可能です。他のヘルパーライブラリも含めることができます。

もちろん、私は配列をループして自分のロジックを実装することができましたが、私はよりクリーンなソリューションを探していました。

+0

あなたのソリューションを追加してください。 –

答えて

3

これは正確に何をしたい返す:グループのための一時的なオブジェクトでプレーンJavaScriptで

_.pairs(_.groupBy(originalArray, v => v.information.type)).map(p => ({type: p[0], persons: p[1]})) 
+1

この純粋な輝きはありません。おかげで@ 4lejandrito – ManuKaracho

0

あなたはgroupBy function of underscore.jsを使用することができます。

var empList = [ 
{id:1,name:"John",information: { type :"employee"}}, 
    {id:2,name:"Charles",information: { type :"employee"}}, 
    {id:3,name:"Emma",information: { type :"ceo"}}, 
    {id:4,name:"Jane",information: { type :"customer"}} 
]; 
_.groupBy(empList, function(emp){ return emp.information.type; }); 
0

ソリューション。

var array = [{ id: 1, name: "John", information: { type: "employee" } }, { id: 2, name: "Charles", information: { type: "employee" } }, { id: 3, name: "Emma", information: { type: "ceo" } }, { id: 4, name: "Jane", information: { type: "customer" } }], 
 
    result = []; 
 

 
array.forEach(function (a) { 
 
    var type = a.information.type; 
 
    if (!this[type]) { 
 
     this[type] = { type: type, persons: [] }; 
 
     result.push(this[type]); 
 
    } 
 
    this[type].persons.push({ id: a.id, name: a.name }); 
 
}, {}); 
 

 
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

関連する問題