다음과 같이 과목명과 학습 예정 시간이 함께 담긴 일정 데이터가 있다고 가정해 보겠습니다.
const scheduleDetails = [
{ subjectName: 'JavaScript', studyTime: '5 PM - 11 PM' },
{ subjectName: 'MySQL', studyTime: '12 AM - 4PM' }
]이럴 때 배열의 map() 함수를 활용하면 현재 시간이 어느 과목의 학습 시간대에 해당하는지 손쉽게 확인할 수 있습니다. 아래는 전체 코드입니다.
예제 코드
const scheduleDetails = [
{ subjectName: 'JavaScript', studyTime: '5 PM - 11 PM' },
{ subjectName: 'MySQL', studyTime: '12 AM - 4PM' }
]
function timeToReadSubjectName(scheduleDetails) {
var currentTime = new Date().getHours();
let result = '';
scheduleDetails.map(obj => {
const hourDetails = obj.studyTime.split(' ');
const firstCurrentTime = hourDetails[1] === 'PM' ? 12 : 0;
const secondCurrentTime = hourDetails[4] === 'PM' ? 12 : 0;
if (currentTime > (+hourDetails[0] + firstCurrentTime) &&
currentTime < (+hourDetails[3] + secondCurrentTime)) {
result = obj.subjectName;
};
})
return result;
}
console.log("The Subject which you need to read in this time="+timeToReadSubjectName(scheduleDetails));코드 동작 원리
new Date().getHours()를 호출해 현재 시간을 0~23 사이의 숫자로 가져옵니다.split(' ')으로 studyTime 문자열을 공백 기준으로 나누어 시작 시간, AM/PM 구분자, 종료 시간 정보를 추출합니다.- 시간 표기가 'PM'이면 12를 더해 24시간제 기준 값으로 보정합니다.
- 현재 시간이 시작 시간보다 크고 종료 시간보다 작으면, 해당 조건을 만족하는 과목명을 result 변수에 저장합니다.
- 모든 일정을 확인한 뒤 최종 결과를 반환합니다.
위 프로그램을 실행하려면 다음 명령어를 입력합니다.
node fileName.js
여기에서는 파일 이름이 demo128.js라고 가정하겠습니다.
실행 결과
프로그램을 실행하면 다음과 같은 출력을 확인할 수 있습니다.
PS C:\Users\Amit\JavaScript-code> node demo128.js The Subject which you need to read in this time=JavaScript
참고로, 조건에 맞는 요소 하나만 찾는 경우라면 map() 대신 find() 메서드를 사용하는 것이 더 효율적입니다. find()는 조건을 만족하는 첫 번째 요소를 발견하는 즉시 반복을 중단하기 때문에 불필요한 연산을 줄일 수 있습니다.