Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript map() 함수로 현재 시간이 특정 시간대에 포함되는지 확인하는 방법

다음과 같이 과목명과 학습 예정 시간이 함께 담긴 일정 데이터가 있다고 가정해 보겠습니다.

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()는 조건을 만족하는 첫 번째 요소를 발견하는 즉시 반복을 중단하기 때문에 불필요한 연산을 줄일 수 있습니다.