2012-02-21 7 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; }); 

groupId 필드의이 종류의 멀티 - 정렬하지만 어떻게 groupIdvalue을 기준으로 정렬 할 수 있습니까?다차원 배열

+0

그것은 유용 할 수 있습니다. http://stackoverflow.com/q/9375788/989121 – georg

답변

7

변경

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

'.sort()'함수 콜백에서 -1, 0, 1을 반환하는 것이 더 좋습니다. –

+0

알려 주셔서 감사합니다. –

2

에 return 문 방법에 대한

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

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

자바 스크립트 다중 기준 정렬

당신이 의 groupId을 기준으로 정렬하려면, 내가 배웠던 sort 함수를 사용할 수있다. (JsFiddle : http://jsfiddle.net/oahxg4u3/6/). 이 정렬 함수를 사용하여 n 값 또는 단일 값으로 정렬 할 수도 있습니다.

는 정의 :

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); 
    }); 
} 

호출 : 당신은`a.groupId> b.groupId` 브라우저에 따라 잘못된 결과를 반환 할 수 있다는 것을 아는

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);