배열에 다음 데이터가 있습니다.
[{
Credits: '4',
Name: 'Computer Science 250: Introduction to Website Design',
Classes:
[
{ Day: 'Mon',
EndTime: '{ts \'1970-01-01 18:00:00\'}',
StartTime: '{ts \'1970-01-01 16:30:00\'}' },
{ Day: 'Wed',
EndTime: '{ts \'1970-01-01 18:00:00\'}',
StartTime: '{ts \'1970-01-01 16:30:00\'}' },
{ Day: 'Fri',
EndTime: '{ts \'1970-01-01 18:00:00\'}',
StartTime: '{ts \'1970-01-01 16:30:00\'}' } ] }
{
Credits: '3',
Name: 'Math 220: Differential Equations',
Classes:
[
{ Day: 'Mon',
EndTime: '{ts \'1970-01-01 18:30:00\'}',
StartTime: '{ts \'1970-01-01 17:30:00\'}' },
{ Day: 'Wed',
EndTime: '{ts \'1970-01-01 18:30:00\'}',
StartTime: '{ts \'1970-01-01 17:30:00\'}' },
{ Day: 'Fri',
EndTime: '{ts \'1970-01-01 18:30:00\'}',
StartTime: '{ts \'1970-01-01 17:30:00\'}' } ] }]
문제는 EndTime별로 데이터를 정렬해야한다는 것입니다 (데이터의이 부분 만 정렬되고 나머지는 정렬되지 않음). 어떻게해야합니까?
또는 내부 배열의 속성을 기반으로 데이터를 최소한 정렬하려면 어떻게해야합니까?
나는 자바 스크립트로 일하고 있습니다.
편집하다
문제는 json 배열에 제공된 주제가 시작 및 종료 시간을 기준으로 충돌하는지 여부를 찾는 것입니다. 예를 들어 위의 주제가 동시에 발생하여 충돌합니다.
내부 배열을 가져 와서 해당 요소를 코스 이름 (또는 모든 코스 정보)으로 확장하고 함께 연결하여 최종적으로 사용자 지정 비교 함수로 정렬 할 수 있습니다.
function byDayTime(schedule) {
const weekDays = {Mon:1, Tue:2, Wed:3, Thu:4, Fri:5};
return schedule.reduce( (acc, course) =>
acc.concat(course.Classes.map( cls =>
Object.assign({}, cls, { courseName: course.Name })
))
, [] ).sort( (a, b) =>
weekDays[a.Day] - weekDays[b.Day] || a.EndTime - b.EndTime
);
}
// Sample data
const schedule = [{
Credits: '4',
Name: 'Computer Science 250: Introduction to Website Design',
Classes: [{
Day: 'Mon',
EndTime: '{ts \'1970-01-01 18:00:00\'}',
StartTime: '{ts \'1970-01-01 16:30:00\'}'
}, { Day: 'Wed',
EndTime: '{ts \'1970-01-01 18:00:00\'}',
StartTime: '{ts \'1970-01-01 16:30:00\'}'
}, { Day: 'Fri',
EndTime: '{ts \'1970-01-01 18:00:00\'}',
StartTime: '{ts \'1970-01-01 16:30:00\'}'
}]
}, {
Credits: '3',
Name: 'Math 220: Differential Equations',
Classes: [{
Day: 'Mon',
EndTime: '{ts \'1970-01-01 18:30:00\'}',
StartTime: '{ts \'1970-01-01 17:30:00\'}'
}, {
Day: 'Wed',
EndTime: '{ts \'1970-01-01 18:30:00\'}',
StartTime: '{ts \'1970-01-01 17:30:00\'}'
}, {
Day: 'Fri',
EndTime: '{ts \'1970-01-01 18:30:00\'}',
StartTime: '{ts \'1970-01-01 17:30:00\'}'
}]
}];
// Get array ordered by day/time:
const result = byDayTime(schedule);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다