프로젝트를 만들다보면 DB 구조가 복잡해질 수 있다.
필자는 백부터 프론트까지 혼자서 만드는 일이 많았기 때문에 이런 일이 잦았다.
각설하고, 이번에 살펴볼 것은 배열 내 객체 값들 간의 정렬을 구현하는 것이다.
DB 구조를는 아래와 같다고 가정해보자.
공개 API로 작업하다보면 이정도 구조는 흔하게 접할 수 있다.
필자는 여기서 title
, date
, like
, comments.length
를 기준으로
정렬을 하는 함수들을 만들고자 한다.
입력되어 있는 데이터를 보아하니...
title
, date
를 기준으로 한다면 문자열끼리 sort()
를 하게 될 것이고,
like
, comments.length
를 기준으로 한다면 숫자형끼리 sort()
를 하게 될 것이다.
그런데 여기서 문제는, 이들이 객체 형식이라는 것이다.
필자는 sort()
를 주로 배열에서 사용해왔다.(코테 연습)
객체 형식의 데이터는 어떻게 sort()
를 사용할까?
너무나도 간단하다.
dataList.sort((a: any, b: any) => {
if (a.title < b.title) {
return -1;
} else if (a.title > b.title) {
return 1;
} else {
return 0;
}
});
위 코드는 title
을 기준으로 오름차순 정렬을 진행한 것이다.
일반적으로 a, b만 등장하던 배열(2차원 배열말고 1차원 배열)과는 약간 다르다.
객체를 사용하던 방법과 다를게 없다...
dataList.sort((a: any, b: any) => {
if (a.comments.length < b.comments.length) {
return -1;
} else if (a.comments.length > b.comments.length) {
return 1;
} else {
return 0;
}
});
그나마 좀 다른 경우인 comments.length
도 같은 방법이다.
예시 DB 구조를 보면 a.comments
는 배열을 의미하므로,
a.comments.length
는 배열의 길이를 의미한다.
그러면 이는 코멘트의 개수를 기준으로 오름차순 정렬을 한 것이 되겠다.