2012-11-13 4 views
1

배열을 정렬하려고합니다. 예를 들어, 주어진 배열 a (아래), 나는 배열 b를 반환하고 싶습니다.개체 속성별로 자바 스크립트 배열 정렬

나는 a.sort()을 할 수 있지만 실제 배열 요소는 정렬하지 않고 배열 요소의 속성 (이 예에서는 s)을 기준으로 정렬하고 싶지 않습니다. 이것이 어떻게 성취 될 수 있는가?

var a=[ 
    {s:"ced",o:{obj:1}}, 
    {s:"cde",o:{obj:2}}, 
    {s:"ade",o:{obj:3}}, 
    {s:"bde",o:{obj:4}} 
] 

var b=[ 
    {s:"ade",o:{obj:3}}, 
    {s:"bde",o:{obj:4}}, 
    {s:"cde",o:{obj:2}}, 
    {s:"ced",o:{obj:1}} 
] 
+0

중복 : [여기] (http://stackoverflow.com/questions/8900732/javascript-sort-objects- 배열에 - 알파벳순으로 하나의 속성 - arra) 및 [여기] (http://stackoverflow.com/questions/8966247/sort-objects-by-a-property-values) – lbstr

답변

7

Array.prototype.sort이 선택적 매개 변수를 받아 감사합니다 콜백이를 정렬하는 방법을 말하고.

a.sort(function(x,y) { 
    // do something here 
    // return -1 if x < y 
    // return 1 if x > y 
    // otherwise, return 0 
}); 

따라서, 귀하의 경우, 그것은 다음과 같습니다

a.sort(function(x,y) {return x.s == y.s ? 0 : (x.s < y.s ? -1 : 1);}); 
+0

Kolink에게 감사드립니다. x와 y는 무엇입니까? 예를 들어 x가 현재 항목이고 y가 최고 또는 최저입니까? – user1032531

+0

그들은'sort' 함수에 의해 선택되어 배열에 들어있는 두 항목입니다. 입력 순서가'[2,3,1]이고''what do 2 and 3 do in do? "..."2와 1은 어떨까요? "..."괜찮아지기 전에, 나는 그것을 얻었다, [1,2,3]. " 요점은 그들이 어떤 품목인지 알 필요가 없다는 것입니다. 알아 두어야 할 것은 두 품목이라는 것과 그들을 비교하는 방법을 묻는 것뿐입니다. –

1

sort 방법을 사용하면 정렬 순서를 계산하는 방법을 정의 할 수 있습니다 때 compareFunction 매개 변수를 받아들입니다.
문자열을 비교할 때이 함수는 here과 같이 localeCompare을 사용해야합니다.
신속하게 조정할 수있는 정렬 기능을 생성하는 한 가지 방법은 다른 기능을 통해 생성 기능을 생성하는 것입니다. 즉, 오브젝트의 모든 특성에 대해 자동으로 정렬 함수를 작성할 수 있습니다. ..
가 함께 2 개를 넣고 당신이 얻을

function genSortFn(prop){ 
    return function(a,b){ return a[prop].localeCompare(b[prop]); }; 
} 
a.sort(genSortFn('s')); 
b.sort(genSortFn('s')); 
+0

'.localeCompare()'에 +1 –