У меня есть объект:
teamTotalChances = {
AFC Wimbledon: 71.43,
Accrington Stanley: 28.57,
Barnsley: 64.28999999999999,
Birmingham City: 114.28,
Blackburn Rovers: 71.43
}
Что я хочу упорядочить по значению (от самого высокого до самого низкого), чтобы оно было:
teamTotalChances = {
Birmingham City: 114.28,
AFC Wimbledon: 71.43,
Blackburn Rovers: 71.43,
Barnsley: 64.28999999999999,
Accrington Stanley: 28.57
}
Я пробовал несколько вещей, включая Object.keys
и Array.from
, но не могу заставить его отображать ключ и значение. В тот момент, когда я заказал его с правильным ключом, но значение потеряно:
keysSorted = Object.keys(teamTotalChances).sort(function(a,b){return
teamTotalChances[b]-teamTotalChances[a]});
keySorted
- это массив, который выглядит следующим образом:
keySorted = [
0: "Birmingham City",
1: "AFC Wimbledon",
2: "Blackburn Rovers",
3: "Barnsley",
4: "Accrington Stanley"
]
Значит, порядок правильный, но я потерял числовое значение!
Спасибо.
Почему? Какой у вас вариант использования?
Я думаю, вы хотите иметь массив объектов и отсортировать его.
Возможный дубликат Как отсортировать ассоциативный массив по его значениям в Javascript?
Вам подходит это выходное представление ?:
[
["Birmingham City", 114.28],
["AFC Wimbledon", 71.43],
["Blackburn Rovers", 71.43],
["Barnsley", 64.28999999999999],
["Accrington Stanley", 28.57]
]
Если да, то это может быть код:
let teamTotalChances = {
"AFC Wimbledon": 71.43,
"Accrington Stanley": 28.57,
Barnsley: 64.28999999999999,
"Birmingham City": 114.28,
"Blackburn Rovers": 71.43
}
console.info(Object.entries(teamTotalChances).sort((a, b) => b[1] - a[1]))
Да, это так! Просто примечание для других: сначала отсортировано с наименьшим значением, поэтому я просто поменял местами b [1] и a [1]. Затем я перебрал этот массив следующим образом: teamEntries.forEach (function (team) {console.info (team [0] + "" + team [1]);});
Вам необходимо преобразовать их в управляемый источник. Я сначала преобразовал каждый из них в массив объектов ключ / значение, а затем отсортировал этот массив от самого высокого до самого низкого.
let teamTotalChances = {
'AFC Wimbledon': 71.43,
'Accrington Stanley': 28.57,
'Barnsley': 64.28999999999999,
'Birmingham City': 114.28,
'Blackburn Rovers': 71.43
}
let result = Object.keys(teamTotalChances).map(itm => { return { key: itm, value: teamTotalChances[itm] } })
console.info(result.sort((a, b) => b.value - a.value))
Да, идеально! Спасибо.
Объекты не упорядочены. Object.entries и отсортируйте это или отсортируйте ключи по значению и просто используйте этот массив ключей для ссылки на значение в объекте.