2012-02-21 50 views
5
var availableTags = [ 
    {value:"fruit",desc:"fruit",groupId:2,userId:4}, 
    {value:"aGan",desc:"normal user",groupId:4,userId:5}, 
    {value:"father's home ",desc:"normal user",groupId:2,userId:4}  

    ].sort(function(a, b) { return a.groupId > b.groupId; }); 

này loại bởi groupId lĩnh vực, nhưng làm thế nào để sắp xếp theo groupIdvalue?Multi-sắp xếp một mảng đa chiều

+0

Nó có thể là hữu ích cho bạn biết rằng 'a.groupId> b.groupId' có thể đưa ra kết quả không chính xác, tùy thuộc vào trình duyệt của bạn. Xem http://stackoverflow.com/q/9375788/989121 – georg

Trả lời

7

Thay đổi câu lệnh return để

return a.groupId > b.groupId || (a.groupId == b.groupId && a.value > b.value); 
+0

Tốt hơn là trả về -1, 0, 1 trong hàm gọi hàm '.sort()'. –

+0

Cảm ơn bạn đã cho tôi biết. –

2

Làm thế nào về

.sort(function (a, b) { 
    var firstGroupId = a.groupId; 
    var secondGroupId = b.groupId; 

    return (firstGroupId === secondGroupId) ? a.value > b.value : firstGroupId > secondGroupId; 
}); 
0

Javascript Multi-Tiêu chuẩn Sắp xếp

Nếu bạn muốn sắp xếp theo groupIdgiá trị, bạn có thể sử dụng chức năng sắp xếp mà tôi đã ted dưới đây (JsFiddle: http://jsfiddle.net/oahxg4u3/6/). Hàm sắp xếp này cũng có thể được sử dụng để sắp xếp theo n-giá trị, hoặc bởi một giá trị duy nhất.

Xác định:

function sortByCriteria(data, criteria) { 
    return data.sort(function (a, b) { 

     var i, iLen, aChain, bChain; 

     i = 0; 
     iLen = criteria.length; 
     for (i; i < iLen; i++) {   
      aChain += a[criteria[i]]; 
      bChain += b[criteria[i]]; 
     } 

     return aChain.localeCompare(bChain); 
    }); 
} 

Invoke:

var data = [ 
    {value:"fruit", desc:"fruit", groupId:2, userId:4}, 
    {value:"aGan", desc:"normal user", groupId:4, userId:5}, 
    {value:"father's home ", desc:"normal user", groupId:2, userId:4} 
]; 
var criteria = ["groupId", "value"]; 

sortByCriteria(data, criteria);