2014-04-22 70 views
1

如何將具有父子關係的對象數組平鋪到單個數組中,該數組是具有Underscore的每個父對象和子對象的乘積?假設如下:使用Underscore平面映射和投影數組

var parents=[ 
{id:1,name:'John',children:[{id:1,name:'Nancy'},{id:2,name:'Bob'}]}, 
{id:2,name:'Jack'}, 
{id:3,name:'Jane',children:[{id:1,name:'Chloe'},{id:2,name:'Lisa'}]} 
] 

我需要以下的輸出:

var aggregate=[ 
{id:1,name:'John',child:{id:1, name: 'Nancy'}}, 
{id:1,name:'John',child:{id:2, name: 'Bob'}}, 
{id:2,name:'jack',child:null}, 
{id:1,name:'Jane',child:{id:1, name: 'Chloe'}}, 
{id:1,name:'Jane',child:{id:2, name: 'Lisa'}} 
] 

我有一種感覺,我需要使用mapchaining

在此先感謝。

回答

2

你可以每個家長映射到兒童的數組,然後壓平,以獲得父母+孩子的名單:

var aggregate = _(parents).chain(). 
map(function(parent) { 
    // no child case 
    if ((!parent.children) || (!parent.children.length)) 
     return _.extend(_.omit(parent, 'children'), {child: null}); 

    // array of parent+child 
    return _.map(parent.children, function(child) { 
     return _.extend(_.omit(parent, 'children'), {child: child}); 
    }); 
}).flatten().value(); 

並演示http://jsfiddle.net/nikoshr/8HAVJ/

+0

輝煌,謝謝。 –