2014-04-15 3 views
1

배열의 달과 년이 있습니다 - 1 월 12 일 사이의 달로 표시됩니다. 배열을 정렬하여 현재 연도의 현재 월을 먼저 표시 할 수 있습니다.현재 달로 시작하는 배열 정렬

allMonths = [month: 1 year: 2013 value: 25, 
     month: 1 year: 2014 value: 17, 
     month: 2 year: 2013 value: 10, 
     month: 2 year: 2014 value: 16, 
     month: 3 year: 2013 value: 25, 
     month: 3 year: 2014 value: 17, 
     month: 4 year: 2013 value: 10, 
     month: 4 year: 2014 value: 16, 
     ......etc ] 

allMonths.sort(function(a, b){ 
if (a.year > b.year) 
    return 1;    
if (a.month < b.month) 
    return -1; 
}) 

내가 그 값의과 출력이 현재 월부터 지난 12 개월 동안 보여주고 싶은 ... (I 연도를 표시 할 필요가 없습니다)

4: 16 (Apr 2014) 
3 : 17(March 2014) 
2: 16 (Feb 2014) 
1: 16 (Jan 2014) 
12 : 17(Dec 2013) 
11: 16 (Nov 2013) 
...etc 

내가하지 않은 배열을 정렬하는 데 많은 경험이 있었기 때문에 조금 잃어 버렸습니다.

+0

가'달이 될 것이다 작성

allMonths.sort(function(a, b) { if (a.year > b.year) return 1; if (a.year < b.year) return -1; if (a.month > b.month) return 1; if (a.month < b.month) return -1; return 0; }) 

더 짧은 방법을 시도? Date 객체를 생성합니까? 샘플을 실행 가능하게 만드십시오. – Bergi

답변

2

연도가 같으면 월의 차이를 반환하고, 그렇지 않으면 년 자체의 차이를 반환합니다. 당신이 큰 순서 배열 (첫 번째 가장 최근의 일을) 정렬 할 경우이

allMonths.sort(function(a, b) { 
    if (a.year === b.year) { 
     return b.month - a.month; 
    } 
    return b.year - a.year; 
}); 

그것은 될 수있는 것처럼

allMonths.sort(function(a, b) { 
    if (a.year === b.year) { 
     return a.month - b.month; 
    } 
    return a.year - b.year; 
}); 

, 그냥, 세월과 달과 비교되는 순서를 교체 이

allMonths.sort(function(a, b) { 
    return a.year === b.year ? b.month - a.month : b.year - a.year; 
}); 

주처럼, 삼항 표현으로 간결하게 작성 : 자바 스크립트의 종류는 안정을 보장 할 수 없습니다.