【问题标题】:Sort object by value按值排序对象
【发布时间】:2013-12-18 11:47:03
【问题描述】:

所以这是对象:

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

编辑:我尝试过这样的事情但没有成功:

var packs_array = [];

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

packs_array.sort();

【问题讨论】:

  • 在排序前需要将对象转换为数组,因为对象没有顺序
  • amount 是一个整数,对吧?
  • 您是否使用 DOM 元素中的值,如果使用,请告诉我们如何使用,并且创建元素数组并将它们以正确的顺序插入 DOM 可能更容易。
  • @floww,是的,它是一个整数。

标签: javascript jquery sorting object


【解决方案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}]

【讨论】:

  • 注意:此片段使用 ES5 功能。如果您的目标是 IE8 和更早版本的浏览器,则应在页面中包含类似 Augment.jses5-shim.js 的 ES5 shim。
【解决方案2】:

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

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

...然后使用自定义排序函数对该数组进行排序:

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

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

【讨论】:

  • 排序后如何获取对象的ID?我的意思是 93 表示金额 = 2000。
【解决方案3】:

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 ]

Source

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 2011-01-28
    • 2011-11-16
    • 1970-01-01
    • 2012-12-24
    相关资源
    最近更新 更多