2016-04-04 30 views
1

Bu, this question'a benzer, ancak diziler yanında başka nesne değerleri olduğunda hafif bir bükülme ile ve ihtiyacım olanı almak için kesin sözdizimini anlayamıyorum.Yuvalanmış nesne dizisi değerlerini başka bir diziye alma

Böyle bir şey var:

const metadata = [ 
    { 
    stepName: 'Step one', 
    controls: [ 
     {fieldName: 'one', label: 'Field One', type: 'input'}, 
     {fieldName: 'two', label: 'Field Two', type: 'multiline'} 
    ] 
    }, 
    { 
    stepName: 'Step two', 
    controls: [ 
     {fieldName: 'three', label: 'Field Three', type: 'input'}, 
     {fieldName: 'four', label: 'Field Four', type: 'multiline'} 
    ] 
    } 
] 

... ve ben gibi bir şey ile bitirmek böylece orada kendi diziye fieldName için tüm değerleri almak istiyorum:

someFieldArray = ['one', 'two', 'three', 'four'] 

Hemen her girişimde bir yerlere boğaz attım. Yinelemenin ve yıkımın bir bileşimini kullanarak yakın olduğumu biliyorum, ancak kesin sözdizimini ve birleşimi doğru olarak göremiyorum. Ben Babel kullanarak transpiled ES2015 (6) kullanıyorum. Bunu nasıl yapacağınıza dair herhangi bir yardım takdir edilir! Bir şeyi daha kolay hale getirecekse ({... metadata}) meta verileri bir nesneye dönüştürebilirim.

+0

Sadece benzersiz * fieldName * değerlerini veya tüm değerleri ister misiniz? – RobG

cevap

1

var metadata = [{ stepName: 'Step one', controls: [{ fieldName: 'one', label: 'Field One', type: 'input' }, { fieldName: 'two', label: 'Field Two', type: 'multiline' }] }, { stepName: 'Step two', controls: [{ fieldName: 'three', label: 'Field Three', type: 'input' }, { fieldName: 'four', label: 'Field Four', type: 'multiline' }] }], 
 
    result = metadata.reduce(function (r, a) { 
 
     return r.concat(a.controls.map(function (b) { return b.fieldName; })); 
 
    }, []); 
 

 
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
bir ES6 yaklaşım için soruyorsun yana

, bu çözüm aradığınız şey olabilir.

[].concat(...metadata.map(item => item.controls.map(obj => obj.fieldName))); 
+0

Bunu kabul ettiğim yanıt olarak değiştirdim çünkü ES6 kullanıyorum –

3

ES5'te bunu yazabilirsiniz.

+1

Mükemmel, hızlı ve çok daha az karmaşık, sonra ne deniyordum. Teşekkürler! –

İlgili konular