2013-06-11 3 views
2

I는 함수 해봤이개체 속성의 숫자 값을 기준으로 개체 배열을 정렬하는 방법은 무엇입니까?

var arr = [{ "name": "John", "age": "16" }, 
      { "name": "Charles", "age": "26" }, 
      { "name": "Charles", "age": "12" }, 
      { "name": "Charles", "age": "44" }, 
      { "name":"Charles", "age": "1" }, 
      { "name": "Charles", "age": "4"}] 

같은 배열 나이 4 상단 와야 갖는 찰스

var sorted = yourArray.sort(function IHaveAName(a, b) 
{ // non-anonymous as you ordered... 
    return b.age < a.age ? 1 // if b should come earlier, push a to end 
    : b.age > a.age ? -1 // if b should come later, push a to begin 
    : 0;     // a and b are equal 
}); 

결과 얻어진

[ { name: 'Charles', age: '1' }, 
{ name: 'Charles', age: '12' }, 
{ name: 'John', age: '16' }, 
{ name: 'Charles', age: '26' }, 
{ name: 'Charles', age: '4' }, 
{ name: 'Charles', age: '44' } ] 

인 가지고 .

어디서 잘못 될까요?

+0

알파벳순으로 정렬 한 다음 오름차순으로 정렬 하시겠습니까? 또한, 당신의 나이는 문자열입니다. –

+0

return + b.age <+ a.age – karaxuna

+0

js에 대한 기능적 구문 설탕 인 underscore.js를 살펴보십시오. –

답변

7

귀하의 연령대는 문자열이며 그 순서대로 정렬됩니다.

결과를 원하는 경우 정렬 할 때 parseInt까지 실행하십시오.

var sorted = arr.sort(function IHaveAName(a, b) 
{ var _a = parseInt(a.age, 10), _b = parseInt(b.age, 10); 
    return _b < _a ? 1 // if b should come earlier, push a to end 
    : _b > _a ? -1 // if b should come later, push a to begin 
    : 0;     // a and b are equal 
}); 
+0

또한 두 번째 매개 변수를 추가했는지 확인하십시오 ... –

+0

지금 막이 시도했습니다 .. 예. 그 오는 괜찮아 .. 감사합니다 – shanmugharaj

+0

'return _a - _b; ' – Prinzhorn

관련 문제