如何按价值对集合进行排序?

时间:2012-12-18 22:08:01

标签: javascript underscore.js

我有一个对象数组。我想使用underscore.js按各自的值对每个对象进行排序。

var myArray = [
    {a:1, b:2, c:2},
    {a:1, b:3, c:2},
    {a:3, b:2, c:1},
    {a:1, b:1, c:4},
    {a:1, b:2, c:4},
];

我尝试过这种方法没有运气......

var myArray = [
    {a:1, b:2, c:2},
    {a:1, c:2, b:3},
    {c:1, b:2, a:3},
    {a:1, b:1, c:4},
    {a:1, b:2, c:4},
];

我正在尝试使用此方法。

_.each(myArray, function(obj) {
    _(obj).sortBy(function(val, key) {
      return val;
    });

});

这是我的小提琴http://jsfiddle.net/rsturim/wNLkX/

2 个答案:

答案 0 :(得分:5)

您无法对对象中的属性进行排序。对象中的属性没有任何特定的顺序。

循环访问属性时返回属性的顺序取决于实现,并且在浏览器之间有所不同。

答案 1 :(得分:2)

如前所述,您无法在Javascript中对属性进行排序。但是,您可以将排序信息保存在单独的数组中。

  1. 创建一个仅包含对象Keys的数组。
  2. 通过交叉检查原始对象中的值对该数组进行排序
  3. 通过迭代排序的键数组
  4. 按排序顺序访问值