Группа Лодаш по нескольким клавишам - PullRequest
0 голосов
/ 16 мая 2019

У меня есть следующий объект

[{ Venue: 'NY',
    Title: 'NY Feast',
    PromoDate: '5/1/18',
    EndDate: '5/1/18',
    Price : $49.99,
    Notes: '',
    'Image Assigned': '',
    'Image Ready': '',
    'Ad Scheduled': '' },
  { Venue: 'NY',
    Title: 'NY Flash',
    PromoDate: '5/1/18',
    EndDate: '5/1/18',
    Price : $40.99,
    Notes: '',
    'Image Assigned': '',
    'Image Ready': '',
    'Ad Scheduled': '' },
  { Venue: 'BOSTON',
    Title: 'Never Too Late',
    PromoDate: '5/1/18',
    EndDate: '5/1/18',
    Price : $9.99,
    Notes: '',
    'Image Assigned': '',
    'Image Ready': '',
    'Ad Scheduled': '' },
  { Venue: 'BOSTON',
    Title: 'The Reluctant Bride',
    PromoDate: '5/1/18',
    EndDate: '5/1/18',
    Price : $19.99,
    Notes: '',
    'Image Assigned': '',
    'Image Ready': '',
    'Ad Scheduled': '' 
 }
]

Ожидаемый результат после выполнения операции

[{ Venue: 'NY',
    Titles:  [{Title: 'NY Feast', Price: '49.99'}, {Title:'NY Flash', Price: '$40.99'}],
    PromoDate: '5/1/18',
    EndDate: '5/1/18',
    Notes: '',
    'Image Assigned': '',
    'Image Ready': '',
    'Ad Scheduled': '' },
  { Venue: 'BOSTON',
    Titles: [{Title: 'Never Too Late', Price: '$9.99'}, {Title: 'The Reluctant Bride', Price: '$19.99'}] ,
    PromoDate: '5/1/18',
    EndDate: '5/1/18',
    Notes: '',
    'Image Assigned': '',
    'Image Ready': '',
    'Ad Scheduled': '' }
]

Я пытаюсь с Lodash Groupby, но это не работает для меня.Я должен сгруппировать по заголовкам, PromoDate и EndDate, поскольку они являются уникальным полем.

Буду признателен за любую помощь в этом.

1 Ответ

0 голосов
/ 16 мая 2019

Вы можете сделать это с одним Array.reduce и без lodash:

let data = [{ Venue: 'NY', Title: 'NY Feast', PromoDate: '5/1/18', EndDate: '5/1/18', Price: '$49.99', Notes: '', 'Image Assigned': '', 'Image Ready': '', 'Ad Scheduled': '' }, { Venue: 'NY', Title: 'NY Flash', PromoDate: '5/1/18', EndDate: '5/1/18', Price: '$40.99', Notes: '', 'Image Assigned': '', 'Image Ready': '', 'Ad Scheduled': '' }, { Venue: 'BOSTON', Title: 'Never Too Late', PromoDate: '5/1/18', EndDate: '5/1/18', Price: '$9.99', Notes: '', 'Image Assigned': '', 'Image Ready': '', 'Ad Scheduled': '' }, { Venue: 'BOSTON', Title: 'The Reluctant Bride', PromoDate: '5/1/18', EndDate: '5/1/18', Price: '$19.99', Notes: '', 'Image Assigned': '', 'Image Ready': '', 'Ad Scheduled': '' } ]

let result = data.reduce((r, c) => {
  let key = `${c.Venue}-${c.PromoDate}-${c.EndDate}`
  let { Title, Price, ...other } = c
  r[key] = r[key] || { Titles: [], ...other }
  r[key].Titles.push({ Title, Price })
  return r
}, {})

console.log(Object.values(result))

Идея состоит в том, чтобы сгруппировать по составному ключу, а затем просто уменьшить до нужных вам свойств.

...