Как отсортировать объект по ключу в обратном порядке

Подскажите, как отсортировать объекты по ключам в обратном порядке.

const arr = [
    { id: 1, score: "12" },
    { id: 2, score: "8" },
    { id: 3, score: "4" },
    { id: 4, score: "8" }
]

const func = arr.reduce((group, product) => {
    const { score } = product;
    group[score] = group[score] ?? [];
    group[score].push(product);
    return group;
}, {});

console.log(func)

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

{
    "12": [{ id: 1, score: "12" }],
    "8": [{ id: 2, score: "8" }, { id: 4, score: "8" }],
    "4": [{ id: 3, score: "4" }]
}


Ответы (1 шт):

Автор решения: Алексей Шиманский

У объектов всегда будет именно так. Этого не изменить... Так что придётся придумывать обходные пути. Например достать из объекта ключи и сложить в массив. Отсортировать массив в обратном порядке. А потом при выводе где-либо, делать цикл именно по этому отсортированному массиву, но доставать данные уже из объекта:

let obj = {
    "12": [{ id: 1, score: "12" }],
    "8": [{ id: 2, score: "8" }, { id: 4, score: "8" }],
    "4": [{ id: 3, score: "4" }]
};

let arr = Object.keys(obj);
arr.sort((a, b) => +b - +a);

for (let element of arr) {
    console.log(`Значения по ключу с номером ${element}:`,  obj[element]);
}

→ Ссылка