[Javascript] 다양한 key-value를 가진 Object 정렬하기

박기영·2022년 10월 6일
0

Javascript

목록 보기
5/45

프로젝트를 만들다보면 DB 구조가 복잡해질 수 있다.
필자는 백부터 프론트까지 혼자서 만드는 일이 많았기 때문에 이런 일이 잦았다.
각설하고, 이번에 살펴볼 것은 배열 내 객체 값들 간의 정렬을 구현하는 것이다.

DB 구조를는 아래와 같다고 가정해보자.

참고 이미지

공개 API로 작업하다보면 이정도 구조는 흔하게 접할 수 있다.
필자는 여기서 title, date, like, comments.length를 기준으로
정렬을 하는 함수들을 만들고자 한다.

입력되어 있는 데이터를 보아하니...
title, date를 기준으로 한다면 문자열끼리 sort()를 하게 될 것이고,
like, comments.length를 기준으로 한다면 숫자형끼리 sort()를 하게 될 것이다.

그런데 여기서 문제는, 이들이 객체 형식이라는 것이다.
필자는 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는 배열의 길이를 의미한다.
그러면 이는 코멘트의 개수를 기준으로 오름차순 정렬을 한 것이 되겠다.

참고 자료

mber님 블로그
codechacha

profile
나를 믿는 사람들을, 실망시키지 않도록

0개의 댓글