У меня есть массив объектов, который я должен сгруппировать и отсортировать:
[
{
id: 123,
group: 'abc',
metadata: {
name: 'tom'
},
date: ISODate("2019-07-08T20:33:40.475Z")
},
{
id: 456,
group: 'def',
metadata: {
name: 'bob'
},
date: ISODate("2019-07-08T20:33:40.475Z")
},
{
id: 789,
group: 'def',
metadata: {
name: 'bob'
},
date: ISODate("2019-07-10T20:33:40.475Z")
},
{
id: 234,
group: 'ghi',
metadata: {
name: 'frank'
},
date: ISODate("2019-07-10T20:33:40.475Z")
},
{
id: 567,
group: 'abc',
metadata: {
name: 'tom'
},
date: ISODate("2019-07-10T20:33:40.475Z")
}
]
Сначала мне нужно сгруппировать элементы по значению группы, затем мне нужно отсортировать элементы этого сгруппированного массивапо дате.
Для группировки я пробовал это:
const result = array.reduce(function (r, a) {
r[a.group] = r[a.group] || [];
r[a.group].push(a);
return r;
}, Object.create(null));
Но результат не такой, как ожидалось, и элементы не отсортированы по дате.
Результатможет / должен выглядеть примерно так:
[
[
{
id: 123,
group: 'abc',
metadata: {
name: 'tom'
},
date: ISODate("2019-07-08T20:33:40.475Z")
},
{
id: 567,
group: 'abc',
metadata: {
name: 'tom'
},
date: ISODate("2019-07-10T20:33:40.475Z")
}
],
[
{
id: 456,
group: 'def',
metadata: {
name: 'bob'
},
date: ISODate("2019-07-08T20:33:40.475Z")
},
{
id: 789,
group: 'def',
metadata: {
name: 'bob'
},
date: ISODate("2019-07-10T20:33:40.475Z")
}
],
[
{
id: 234,
group: 'ghi',
metadata: {
name: 'frank'
},
date: ISODate("2019-07-10T20:33:40.475Z")
}
]
]