2017-11-29 8 views
0

온라인에서 내 문제를 검색했지만 제대로 작동하지 않는 것 같습니다.녹아웃 js 정렬 기능은 배열의 2 항목 만 정렬합니다.

actualDate: "2017-11-25T00:00:00.000Z" 
    expectedDate: "2017-11-17T00:00:00.000Z" 
    id: 2 
    initialDate: "2017-11-17T00:00:00.000Z" 
    isDone: false 
    markerTitle: "Test" 
    markerTypeId: 1 
    projectId: 11 

그리고 여기 내 정렬 기능은 다음과 같습니다 :

self.listOfMarkers(self.listOfMarkers().sort(function (m1, m2) 
    { 
     var d1 = (m1.actualDate === null ? (m1.expectedDate === null ? 
     m1.initialDate : m1.expectedDate) : m1.actualDate); 
     var d2 = (m2.actualDate === null ? (m2.expectedDate === null ? 
     m2.initialDate : m2.expectedDate) : m2.actualDate); 

     return d1 < d2 ? -1 : 1; 
    })); 

이 기능은 내 업데이트의 콜백 함수에서 실행되는 다음

는 목록에있는 항목 (구문 분석 된 JSON) 같은 모습입니다 항목의 나는 API 측면에서 C#으로 정렬 할 수 있었지만 앞면에서는 2 개의 항목 만 정렬했습니다.

아이디어가 있으십니까?

미리 감사드립니다.

+0

코드를 모두 읽지는 않았지만 동등한 날짜에'0'을 반환하지 않는 것이 문제 일 수 있습니다.'return d1 d2? -1 : 0;' – user3297291

+0

안녕하세요, 나는 이것을 시도했습니다 : return d1 === d2? 0 : (d1 AnthonyDa

+0

문제를 재현하려고 시도했으나 (es6 구문을 사용하여 일부 지름길을 만들었지 만 기본은 동일 함), 할 수 없었습니다. https://jsfiddle.net/udetrjnp/ 다르게 한 것에 대한 아이디어가 있습니까? – user3297291

답변

0

나는 위의 의견에서 user3297291의 도움으로 해결책을 찾았으므로 스스로 답할 것입니다. 내가 중간체를 사용하여 바르거나 내가 올바른 날짜를 받고 있어요 방식이 문제라고 생각

self.listOfMarkers(self.listOfMarkers().sort(function (m1, m2) { 
     m1 = m1.actualDate || m1.expected || m1.initialDate; 
     m2 = m2.actualDate || m2.expected || m2.initialDate; 

     return m1 > m2 ? 1 : m1 < m2 ? -1 : 0; 
    })); 

이로 분류 기능을 변경

이 문제를 해결했다.