Я хотел бы отсортировать объект, который вы можете видеть ниже. Я хочу добавить все свойства rating
для каждого объекта и отсортировать объект в зависимости от того, какой рейтинг самый высокий.
Так, например, если Intro 1
общая оценка равна 7, а Intro 2
общая оценка равна 3, то Intro 1
должен быть первым объектом.
{
'Intro 2': [
{
deckName: 'Test 2',
rating: 1
},
{
deckName: 'Test 2',
rating: 2
}
],
'Intro 1': [
{
deckName: 'Test 1',
rating: 3
},
{
deckName: 'Test 1',
rating: 4
}
]
}
Можете ли вы сказать мне, что вы не понимаете?
Вот ваши данные
const data = {
"Intro 2": [
{
deckName: "Test 2",
rating: 1
},
{
deckName: "Test 2",
rating: 2
}
],
"Intro 1": [
{
deckName: "Test 1",
rating: 3
},
{
deckName: "Test 1",
rating: 4
}
]
};
Превратим его в массив и отсортируем
const dataArr = Object.entries(data);
const sorted = dataArr.sort(
(a, b) =>
b[1].reduce((acc, curr) => {
return acc + curr.rating;
}, 0) -
a[1].reduce((acc, curr) => {
return acc + curr.rating;
}, 0)
);
И, наконец, преобразование массива обратно в объект
const obj = {};
sorted.forEach((item) => {
obj[item[0]] = item[1];
});
Песочница кода: https://codesandbox.io/s/sleepy-ramanujan-dwzwjm?file=/src/index.js
ОБНОВИТЬ
Для последнего цикла преобразования массива в объект это может быть более элегантным решением.
const obj = Object.fromEntries(sorted);
Что вы пробовали и в чем именно проблема?