2016-12-04 5 views
1

私は機会があり、それぞれの機会にメモがあるデータ構造を持っています。私は、人に関連するすべての機会のメモをすべて取り上げて、それらを表示したい。今、私は以下を持っています。しかし、私が考えているのは、外部配列を持つことができない代わりに、opportunityNotesListから.value()と同じ結果を返すという、より簡単な方法が必要であるということです。Lodashで子ノードのコレクションを作成

const thisNotes = {} 
    const opportunityNotesList = _(opportunities) 
     .map((opportunity, id) => ({id, ...opportunity})) 
     .filter(opportunity => opportunity.linkToContact === id) 
     .map(opportunity => { 
      _(opportunity.notes) 
       .map((note, id) => ({id, ...note})) 
       .each(note => { 
        thisNotes[`${note.id}`] = note 
       }) 
     }) 

本当にこのクエリを取り除くより洗練された方法をお探しください。

答えて

1

あなたは `.MAPを(続ける場合は、` .reduce() `` `.keyBy( '​​ID')とを交換することができますネストされたループ

const thisNotes = _(opportunities) 
    .filter({linkToContact: id}) 
    .flatMap('notes') 
    // way 1 - if id is really necessary 
    .map((note, id) => ({id, ...note})) 
    .keyBy('id') 
    // way 2 - if id is unnecessary 
    .reduce(function(result, note, id) { 
     result[id] = note; 
     return result; 
    }, {}); 
+0

を回避するために使用)' –

+0

@OriDroriのおかげに! – stasovlas

0

私はあまりにもエレガントにしようとしないことをお勧めします。私はすでに、上記のコードを追跡するのに苦労しています、別の開発者がそれを持ち上げて変更を加えなければならないと想像してください!

それを独自のヘルパーにするか、それともセレクターを使用するか(例えばreselectを使用)。

私は同意します。これらの変形は時間の経過とともにかなり痛いものになってしまいます。

関連する問題