2017-10-12 89 views
1

我有一個包含父子關係的數組:平鋪父子對象使用UnderscoreJS

[{ 
    Company: 'ABC', 
    Employees: [{ Company: 'ABC', Name: 'EMP-1' }, 
       { Company: 'ABC', Name: 'EMP-2' }, 
       { Company: 'ABC', Name: 'EMP-3' }] 
}, 
{ 
    Company: 'XYZ', 
    Employees: [{ Company: 'XYZ', Name: 'EMP-4' }, 
       { Company: 'XYZ', Name: 'EMP-5' }, 
       { Company: 'XYZ', Name: 'EMP-6' }] 
}] 

並採用UnderscoreJS的_.flatten方法,我想在同一水平0所有元素,如下所示:

[{ Company: 'ABC' } 
{ Company: 'ABC', Name: 'EMP-1' }, 
{ Company: 'ABC', Name: 'EMP-2' }, 
{ Company: 'ABC', Name: 'EMP-3' }, 
{ Company: 'XYZ' }, 
{ Company: 'XYZ', Name: 'EMP-4' }, 
{ Company: 'XYZ', Name: 'EMP-5' }, 
{ Company: 'XYZ', Name: 'EMP-6' }] 

但我不知道如何做到這一點。

回答

1

這裏有下劃線的解決方案,通過數據第一maps返回公司的陣列,而不僱員陣列和員工陣列。這些陣列然後是flattened

var result = _.chain(data) 
    .map(company => [_.omit(company, 'Employees'), company.Employees]) 
    .flatten() 
    .value(); 
0

我用純JS的解決方案:

var array = [{ 
 
    Company: 'ABC', 
 
    Employees: [{ Company: 'ABC', Name: 'EMP-1' }, 
 
       { Company: 'ABC', Name: 'EMP-2' }, 
 
       { Company: 'ABC', Name: 'EMP-3' }] 
 
}, 
 
{ 
 
    Company: 'XYZ', 
 
    Employees: [{ Company: 'XYZ', Name: 'EMP-4' }, 
 
       { Company: 'XYZ', Name: 'EMP-5' }, 
 
       { Company: 'XYZ', Name: 'EMP-6' }] 
 
}] 
 

 
var result = array.reduce(function(store, object, index) { 
 
    var arrayOfEmployees = object.Employees; 
 

 
    delete object.Employees; 
 
    store.push(object); 
 

 
    return store.concat(arrayOfEmployees) 
 
}, []); 
 

 
console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }