안녕하세요, 다음과 같은 개체 배열을 정렬하는 데 도움이 필요합니다.
[
{
"jobID": "202012101329yXHTXvqg",
"jobDate": "12-10-2020",
"jobStart": "13:29:26",
"jobEnd": "13:31:58"
},
{
"jobID": "2020121013290Yyjny8x",
"jobDate": "12-10-2020",
"jobStart": "13:29:58",
"jobEnd": "13:30:36"
},
{
"jobID": "202011120928w28NDLQVu",
"jobDate": "12-11-2020",
"jobStart": "09:28:09",
"jobEnd": "09:28:25"
},
{
"jobID": "202011120927afObyUv8",
"jobDate": "12-11-2020",
"jobStart": "09:27:42",
"jobEnd": "09:27:58"
}
]
jobDate 및 jobEnd별로 desc 순서로 정렬하고 싶습니다.
[
{
"jobID": "202011120928w28NDLQVu",
"jobDate": "12-11-2020",
"jobStart": "09:28:09",
"jobEnd": "09:28:25"
},
{
"jobID": "202011120927afObyUv8",
"jobDate": "12-11-2020",
"jobStart": "09:27:42",
"jobEnd": "09:27:58"
},
{
"jobID": "202012101329yXHTXvqg",
"jobDate": "12-10-2020",
"jobStart": "13:29:26",
"jobEnd": "13:31:58"
},
{
"jobID": "2020121013290Yyjny8x",
"jobDate": "12-10-2020",
"jobStart": "13:29:58",
"jobEnd": "13:30:36"
}
]
다양한 방법을 사용해 보았지만 하나의 값으로 만 정렬 할 수 있습니다. 대신 한 번에 두 개의 값 (jobsDate 및 jobsEnd)으로 정렬해야합니다. 이 문제를 어떻게 처리 하시겠습니까?
항상 내림차순 으로 두 항목 의 s 를 처음에 비교하고 두 날짜가 동일한 경우 두 항목의 값을 계속 비교 하는 ( sort ) 함수 를 작성하면 됩니다.jobDate
jobEnd
jobDate
하나의 경우에는 각 값을 Date
전달하기 전에 유효하게 유형 으로 변환 compareDescending
하거나 MM-DD-YYYY
to YYYY-MM-DD
(현재 사용 사례) 에서 직접 비교를 위해 형식을 다시 지정해야합니다 .
형식이 시간 단위 로 제공 되기 때문에 각각의 두 문자열 값을 jobEnd
통해 직접 비교할 수 있습니다 .compareDescending
hh:mm:ss
24
function sanitizeDateFormat(str) {
const [month, day, year] = str.split('-');
return [year, month, day].join('-');
}
function compareDescending(a, b) {
return ((a > b) && -1) || ((a < b) && 1) || 0;
}
function compareJobsByDateAndEndTime(a, b) {
return compareDescending(
// new Date(a.jobDate),
// new Date(b.jobDate)
sanitizeDateFormat(a.jobDate),
sanitizeDateFormat(b.jobDate)
) || compareDescending(
a.jobEnd,
b.jobEnd
);
}
console.log([{
"jobID": "2020121013290Yyjny8x",
"jobDate": "12-10-2020",
"jobStart": "13:29:58",
"jobEnd": "13:30:36"
}, {
"jobID": "202012101329yXHTXvqg",
"jobDate": "12-10-2020",
"jobStart": "13:29:26",
"jobEnd": "13:31:58"
}, {
"jobID": "202011120927afObyUv8",
"jobDate": "12-11-2020",
"jobStart": "09:27:42",
"jobEnd": "09:27:58"
}, {
"jobID": "202011120928w28NDLQVu",
"jobDate": "12-11-2020",
"jobStart": "09:28:09",
"jobEnd": "09:28:25"
}].sort(compareJobsByDateAndEndTime));
.as-console-wrapper { min-height: 100%!important; top: 0; }
편집하다
무슨 일인지 설명해 주시겠습니까?
((a > b) && -1) || ((a < b) && 1) || 0
– 루카 도널 로이 아
기본적 으로 오름차순에 대한 비교를 수행하는 비교기 함수 는 첫 번째 인수가 두 번째 값보다 "큰" 값인 경우 0보다 큰 값을 반환 할 것으로 예상됩니다 . 마찬가지로 첫 번째 인수가 두 번째 인수에 비해 사소함 을 나타내는 0보다 낮은 반환 값 을 사용합니다. 반환 값 0 은 두 인수의 순서 / 시퀀스가 같음을 나타냅니다. 내림차순으로 정렬하는 데 도움이되는 비교기는 보다 크 거나 작은에 대한 반환 값을 뒤집어 야합니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다