按值排序对象

时间:2013-12-18 11:47:04

标签: javascript jquery sorting object

所以这是对象:

Object structure

如您所见,最后一笔金额(2000)低于10000,但仍然在最后。我正在尝试显示按金额排序的元素。我知道我必须将对象转换为数组并对其使用排序,但我不知道如何正确地执行此操作。

编辑:我尝试过这样的事情没有取得任何成功:

var packs_array = [];

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

packs_array.sort();

3 个答案:

答案 0 :(得分:1)

为此,您需要先将对象转换为数组...

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

...然后使用自定义排序功能对此数组进行排序:

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

Demo。请注意,排序是就地操作(即arr.sort改变现有对象。)

答案 1 :(得分: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}]

答案 2 :(得分:-1)

JavaScript sort()函数默认使用列表元素作为字符串。您应指定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 ]

Source