Я знаю, что существует бесчисленное множество вопросов о группировке по одному свойству из массива объекта. Но я хочу сделать кое-что более конкретное:
const lists = [
{ groupKey: 'ABC', key: 'r8', timestamp: '2014', index: 2 },
{ groupKey: 'ABC', key: 'q8', timestamp: '2012', index: 0 },
{ groupKey: 'ABC', key: 'w8', timestamp: '2013', index: 1 },
{ groupKey: 'CDE', key: 'r7', timestamp: '2019', index: 0 }
]
Результат должен быть сгруппирован по groupKey и отсортирован по индексу.
(индексы здесь - это итераторы 0,1,2,3 ... поэтому нет необходимости в сортировке, а следует размещать их в правильном порядке массива. Пример: array [index] = ...).
Это должно выглядеть так:
{
ABC: [
{ key: 'q8', timestamp: '2012', index: 0 },
{ key: 'w8', timestamp: '2013', index: 1 },
{ key: 'r8', timestamp: '2014', index: 2 }
],
CDE: [
{ key: 'r7', timestamp: '2019', index: 0 }
]
}
Я попытался сгруппировать без сортировки:
const result = lists.reduce((r, item) => {
let { groupKey, ...rest } = item
r[item.groupKey] = [...(r[item.groupKey] || []), rest]
return r
}, {})
И с сортировкой не удалось, но вы понимаете, о чем я:
const result = lists.reduce((r, item) => {
let { groupKey, ...rest } = item
r[item.groupKey][item.index] = rest //err: can not set property 2 of undefined
return r
}, {})
Любые предложения приветствуются
_(data).sortBy('index').groupBy('groupKey').value()
- person georg   schedule 27.05.2019