2016-12-04 2 views
1

У меня есть структура данных, где есть возможности, и у каждой возможности есть заметки. Я хочу взять все заметки о всех возможностях, связанных с человеком, и показать их. Прямо сейчас у меня есть нижеследующее, которое работает. Тем не менее, я думаю, что должен быть более простой способ, когда я не мог бы иметь внешний массив, но вместо этого возвращаю тот же результат, что и .value() из возможностиNotesList.Создание коллекции дочерних узлов в 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

использование , чтобы избежать вложенных циклов

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

Вы можете заменить '.reduce()' с '.keyBy ('ид')', если вы держите '.map()' –

+0

@OriDrori спасибо ! – stasovlas

0

Я бы предложил не стараться быть слишком элегантным. Мне уже сложно отслеживать приведенный выше код, представьте себе, что другой разработчик должен забрать его и внести изменения!

Отделите его в своем собственном помощнике или лучше селектор (например, с помощью reselect).

Я согласен, эти преобразования становятся довольно болезненными с течением времени - одна вещь, с которой я, похоже, продолжает удариться головой.

 Смежные вопросы

  • Нет связанных вопросов^_^