如何在Javascript中对Array中的对象集合进行排序?

时间:2011-09-07 03:48:33

标签: javascript arrays sorting

我在数组中有一个集合对象,

[{A:2, B:2},{A:2, B:3},{A:1, B: 2}, {A:1, B:1}]

我想得到属性A然后属性B的排序结果。因此,它应该是:

[{A:1, B:1}, {A:1, B:2}, {A:2, B:2}, {A:2, B:3}]

3 个答案:

答案 0 :(得分:4)

按A然后按B排序。这种方式有效,因为如果A == AA - A00 || anything始终为anything。因此,它比较A,然后与B的差异为A's are equal.

var list = [{A:2, B:2},{A:2, B:3},{A:1, B: 2}, {A:1, B:1}];
list.sort(function (a, b) {
  return a.A - b.A || a.B - b.B
})

使用完全跨浏览器sort和延迟评估的好处

答案 1 :(得分:3)

您使用首先比较A值的自定义排序回调,然后,如果它们相等则使用B值,从而为排序创建主键和辅助键:

var collection = [{A:2, B:2},{A:2, B:3},{A:1, B: 2}, {A:1, B:1}];

collection.sort(function(a, b){
    if (a.A != b.A) {
        return(a.A - b.a);
    } else {
        return(a.B - b.B);
    }
});

答案 2 :(得分:1)

尝试以下代码

[{A:2, B:2},{A:2, B:3},{A:1, B: 2}, {A:1, B:1}]
.sort(function(a, b) { return (a.A< b.A) ? -1 : (a.A> b.A) ? 1 : 0 })
.sort(function(a, b) { return (a.B< b.B) ? -1 : (a.B> b.B) ? 1 : 0 });