2011-09-07 155 views
2

我有一个集合对象数组,如何在Javascript中对数组中的对象进行排序?

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

我想有属性的一个排序结果,然后属性B.因此,其结果应该是:

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

可能重复[如何排序JSON数组?](http://stackoverflow.com/questions/979256/how-to-sort-a-json-array) – luvieere

回答

4

排序由A然后由B.这种排序工作,因为如果A == A然后A - A0。而0 || anything始终是anything。因此,它比较A则不同,以BA'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和懒惰评估

+0

太棒了!非常感谢你的时间。 – Vicheanak

+0

不错的编辑你原来的文章没有达到预期的结果(这就是为什么我写了我的答案)。 – jfriend00

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); 
    } 
}); 
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 }); 
相关问题