#javascript #node.js #json #sorting
Вопрос:
Я пытаюсь провести классификацию для своего веб-сайта в express, но для этого я хотел бы отсортировать свою ценность от наиболее понравившейся до наименее понравившейся:
user123: 0
user987: 4
user769: 3
и после того, как получите:
user987: 4
user769: 3
user123: 0
для этого я старался
classement.sort(function(a, b) {
return a.val - b.val;
})
но это не сработало с classement.sort is not a function
ошибкой as
вот как выглядит мой json:
{
'60e300f77c30186d545b2db3': 5,
'60e301c4fc57814fd008017c': 2,
'60e4439ea4025957366959f6': 10,
'60e443bda402595736695a26': 4
}
Комментарии:
1.
.sort
работает с массивами, а не с объектами. Преобразуйте свой ответ JSON в массив.2. и нет доступных
.val
3. э-э, я забыл отредактировать это, но thx @zhulien это сработало !
Ответ №1:
Вы пытаетесь вызвать метод массива .sort
для объекта. Сначала вы должны преобразовать свой ответ JSON в массив. Кроме того, поскольку объекты вашего объекта имеют разные имена ключей, вам придется выполнить дополнительное сопоставление, чтобы правильно его обработать. У тебя нет val
собственности.
Кроме того, ваша функция сортировки должна быть отменена, так как вы хотите сортировать по убыванию.
Взгляните на это решение и измените его по своему усмотрению:
const jsonResponse = {
'60e300f77c30186d545b2db3': 5,
'60e301c4fc57814fd008017c': 2,
'60e4439ea4025957366959f6': 10,
'60e443bda402595736695a26': 4
};
const array = [];
Object.entries(jsonResponse).forEach(item => array.push({
key: item[0],
value: item[1]
}));
array.sort((a, b) => {
return b.value - a.value;
});
Комментарии:
1. в любом случае, на самом деле нет причин для этого, так как он автоматически сортируется после установки объекта.
2. @Джейк Автоматически сортирует что?
3. Я имею в виду объект
4. @Джейк, я не понимаю, о чем ты говоришь. Не могли бы вы объяснить, пожалуйста?
5. Я имею в виду,
sortedArray
что объект-это то же самое, что и объект, с которого вы начали