Итак, здесь объект:
Как вы можете видеть, последняя сумма (2000) ниже 10000, но все равно в конце. Я пытаюсь отобразить элементы, отсортированные по количеству. Я знаю, что мне нужно преобразовать объект в массив и использовать сортировку на нем, но у меня нет идеи, как я могу это сделать правильно.
EDIT: Я пробовал что-то вроде этого без каких-либо успехов:
var packs_array = [];
jQuery.each(json.purchase_packs, function(i, pack) {
packs_array.push(pack);
});
packs_array.sort();
var packs = {
0: { amount: 2000 },
3: { amount: 1000 },
5: { amount: 50 }
};
var sortedPacks = Object.keys(packs)
.map(function (id) {
packs[id].id = parseInt(id, 10);
return packs[id];
})
.sort(function (a, b) {
return a.amount - b.amount;
});
console.log(sortedPacks); // => [{"amount":50,"id":5},{"amount":1000,"id":3},{"amount":2000,"id":0}]
Для этого вам нужно сначала преобразовать объект в массив...
var arr = $.map(json.purchase_packs, function(v) { return v; });
... затем отсортируйте этот массив с помощью специальной функции сортировки:
arr.sort(function(a, b) {
return a.amount - b.amount;
});
Демо. Обратите внимание, что сортировка выполняется на месте (т. arr.sort
изменяет существующий объект).
Функция JavaScript sort()
работает со списками по умолчанию как строки. Вы должны указать функцию сортировки для сортировки других типов значений:
var l = [1, 5, 12, 127, 12, 3, 9];
l.sort(function(a,b){return a-b});
=> [ 1, 3, 5, 9, 12, 12, 127 ]
amount
является целым числом, верно?