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

JavaScript로 요일 이름 기준 객체 배열 정렬하기

개요

한 주 7일 동안의 습도 데이터를 담고 있는 객체 배열이 있다고 가정해 보겠습니다. 그런데 이 데이터는 현재 배열 안에 무작위로 섞여 있습니다. 우리는 이 객체 배열을 요일 순서대로 정렬해야 합니다. 즉, 월요일(Monday) 데이터가 가장 먼저 오고, 그다음 화요일(Tuesday), 수요일(Wednesday) 순으로 이어져 마지막에 일요일(Sunday)이 오도록 말입니다.

다음은 정렬 대상이 되는 배열입니다.

const weather = [{
    day: 'Wednesday',
    humidity: 60
}, {
    day: 'Saturday',
    humidity: 50
}, {
    day: 'Thursday',
    humidity: 65
}, {
    day: 'Monday',
    humidity: 40
}, {
    day: 'Sunday',
    humidity: 35
}, {
    day: 'Friday',
    humidity: 80
}, {
    day: 'Tuesday',
    humidity: 45
}];

문제 해결의 핵심: 요일 매핑 객체 만들기

이 문제의 핵심은 각 요일을 올바른 순번(인덱스)에 매핑하는 map 객체를 직접 만드는 것입니다. 예를 들어 다음과 같은 형태가 됩니다.

const map = {
    'Monday': 1,
    'Tuesday': 2,
    'Wednesday': 3,
    'Thursday': 4,
    'Friday': 5,
    'Saturday': 6,
    'Sunday': 7
};

이렇게 매핑 객체가 준비되면, Array.prototype.sort() 메서드에 커스텀 콜백 함수를 전달하여 각 객체가 map에서 가지는 인덱스 값을 기준으로 비교·정렬할 수 있습니다.

전체 코드 예제

const weather = [{
    day: 'Wednesday',
    humidity: 60
}, {
    day: 'Saturday',
    humidity: 50
}, {
    day: 'Thursday',
    humidity: 65
}, {
    day: 'Monday',
    humidity: 40
}, {
    day: 'Sunday',
    humidity: 35
}, {
    day: 'Friday',
    humidity: 80
}, {
    day: 'Tuesday',
    humidity: 45
}];

const map = {
    'Monday': 1, 'Tuesday': 2, 'Wednesday': 3, 'Thursday': 4,
    'Friday': 5, 'Saturday': 6, 'Sunday': 7
};

weather.sort((a, b) => {
    return map[a.day] - map[b.day];
});

console.log(weather);

실행 결과

위 코드를 실행하면 배열이 요일 순서대로 정렬되어 아래와 같은 결과가 출력됩니다.

[
    { day: 'Monday', humidity: 40 },
    { day: 'Tuesday', humidity: 45 },
    { day: 'Wednesday', humidity: 60 },
    { day: 'Thursday', humidity: 65 },
    { day: 'Friday', humidity: 80 },
    { day: 'Saturday', humidity: 50 },
    { day: 'Sunday', humidity: 35 }
]

동작 원리 정리

정렬 과정을 단계별로 살펴보면 다음과 같습니다.

① 먼저 요일 이름을 숫자 순번으로 변환해주는 참조용 map 객체를 정의합니다.
sort() 메서드는 인접한 두 객체 a와 b를 비교하면서, 각 객체의 day 속성을 map에서 조회해 숫자로 변환합니다.
③ 두 숫자의 차(map[a.day] - map[b.day])가 음수면 a가 앞에, 양수면 b가 앞에 오도록 배열 순서가 결정됩니다.
④ 모든 요소에 대해 비교가 완료되면, 월요일부터 일요일까지 순서대로 정렬된 최종 배열을 얻게 됩니다.

이 방식은 요일뿐만 아니라 월 이름('January' → 1), 사용자 지정 카테고리 순서 등 문자열 값에 우선순위를 부여해야 하는 다양한 정렬 상황에 응용할 수 있다는 장점이 있습니다.