Простите за плохую формулировку, я даже не могу сформулировать это по-хорошему, поэтому опишу на примерах.
У меня есть набор приоритетов:
const priorities = new Map([
['lowest', 1],
['low', 2],
['high', 3],
['highest', 4],
])
У меня есть массив объектов с группами и приоритетами:
const array = [
{id: 1, priority: 'high'},
{id: 2, priority: 'lowest'},
{id: 3, priority: 'highest'},
{id: 4, group: 1, priority: 'low'},
{id: 5, group: 2, priority: 'low'},
{id: 6, group: 2, priority: 'lowest'},
{id: 7, group: 2, priority: 'low'},
{id: 8, group: 1, priority: 'high'}
];
И я сгруппировал этот массив в объект с сгруппированными массивами элементов:
const groups = {
0: [{ id: 1, priority: 'high' }, { id: 2, priority: 'lowest' }, { id: 3, priority: 'highest' }], // have no highest priority for group 0
1: [{ id: 4, group: 1, priority: 'low' }, { id: 8, group: 1, priority: 'high' }], // high
2: [{ id: 5, group: 2, priority: 'low' }, { id: 6, group: 2, priority: 'lowest' }, { id: 7, group: 2, priority: 'low' }] // low
};
Приоритет группа (кроме группы 0) это самый высокий приоритет элементов в этой группе. Мне нужно выбрать наивысший приоритет из каждой группы (кроме группы 0) , чтобы отсортировать группы и элементы из группы 0 от highest
до lowest
, это должно выглядеть как
[<highest by priority item w/o group>, ...<items from highest by priority group>, ... , <lowest by priority items>, <>]
Вообще мне нужна сортировка по group's priority
+ item without group priority
+ initial position
. Например, результат для текущего исходного массива:
const result = [
{ id: 3, priority: 'highest' },
{ id: 1, priority: 'high' },
{ id: 4, group: 1, priority: 'low' },
{ id: 8, group: 1, priority: 'high' },
{ id: 5, group: 2, priority: 'low' },
{ id: 6, group: 2, priority: 'lowest' },
{ id: 7, group: 2, priority: 'low' },
{ id: 2, priority: 'lowest' },
];
Как я мог это сделать?