2017-10-12 7 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' }] 

しかし、これを達成する方法はわかりません。純粋なJSと

答えて

1

は、ここでデータを挟んで第1 mapsは従業アレイと従業員のアレイずに会社の配列を返すために、アンダースコアソリューションです。これらの配列は、flattenedです。

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

私のソリューション:

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; }

関連する問題