Сортировать объект по значению

0

Итак, здесь объект:

Изображение 174551

Как вы можете видеть, последняя сумма (2000) ниже 10000, но все равно в конце. Я пытаюсь отобразить элементы, отсортированные по количеству. Я знаю, что мне нужно преобразовать объект в массив и использовать сортировку на нем, но у меня нет идеи, как я могу это сделать правильно.

EDIT: Я пробовал что-то вроде этого без каких-либо успехов:

var packs_array = [];

jQuery.each(json.purchase_packs, function(i, pack) {
    packs_array.push(pack);
});

packs_array.sort();
  • 1
    вам нужно преобразовать объект в массив перед сортировкой, потому что у объекта нет порядка
  • 0
    amount является целым числом, верно?
Показать ещё 3 комментария
Теги:
object
sorting

3 ответа

1
Лучший ответ
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}]
  • 0
    Примечание. В этом фрагменте используются функции ES5. Если вы ориентируетесь на браузеры, такие как IE8 и более ранние, вы должны включить на свою страницу шайбу ES5, например Augment.js или es5-shim.js .
1

Для этого вам нужно сначала преобразовать объект в массив...

var arr = $.map(json.purchase_packs, function(v) { return v; });

... затем отсортируйте этот массив с помощью специальной функции сортировки:

arr.sort(function(a, b) {
  return a.amount - b.amount;
});

Демо. Обратите внимание, что сортировка выполняется на месте (т. arr.sort изменяет существующий объект).

  • 0
    Как получить доступ к идентификатору объекта после сортировки? Я имею в виду 93 для суммы = 2000.
0

Функция 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 ]

Источник

Ещё вопросы

Сообщество Overcoder
Наверх
Меню