고객사에서 csv 파일 다운로드 기능을 업데이트해달라고 요청이 왔다.
기존에는 단순히 구매모델 데이터가 나열되어 있었다.
고객사에서는 브랜드 순, 최근 구입날짜 순으로 구매모델 데이터가 정렬이 되어있게 해달라고 요청이 들어왔다.
나는 데이터를 프론트로 보내기전 sort 메서드를 사용하여 정렬을 하기로 하였다.
const sortedBuyModel = buyModel.sort((modelA, modelB) => {
/** 1. 구매모델 데이터들을 브랜드 순으로 정렬한다. */
if (modelA.BrandOrder - modelB.BrandOrder < 0) {
// 구매모델 A의 브랜드 우선순위가 빠르면 앞에 위치하도록 정렬한다.
return -1;
}
if (modelA.BrandOrder - modelB.BrandOrder > 0) {
// 구매모델 A의 브랜드 우선순위가 늦으면 뒤에 위치하도록 정렬한다.
return 1;
}
/** 2. 만약 구매모델 데이터간 브랜드가 동일하다면, 최근 구매일자순으로 정렬한다. */
if (dayjs(modelA.BuyDate).isAfter(dayjs(modelB.BuyDate))) {
// 구매일자가 최신일수록 앞에 위치하고
return -1;
} else {
// 구매일자가 느릴수록 뒤에 위치하도록 구매모델 데이터가 정렬된다.
return 1;
}
});
sort 메서드를 오랜만에 사용해서 다소 낯설었다.
조금 더 깔끔하게 작성할 방법이 있을 것 같아 chatGPT에게 물어보았다.
const sortedBuyModel = buyModel.sort((modelA, modelB) => {
const brandOrderDiff = modelA.BrandOrder - modelB.BrandOrder;
/** 1. 구매모델 데이터들을 브랜드 순으로 정렬한다. */
if (brandOrderDiff !== 0) return brandOrderDiff;
const dateDiff = dayjs(modelB.BuyDate).diff(dayjs(modelA.BuyDate));
/** 2. 만약 구매모델 데이터간 브랜드가 동일하다면, 최근 구매일자순으로 정렬한다. */
return (dateDiff > 0) ? 1 : -1;
});
가독성이 좋아졌는지는 모르겠지만 더 깔끔해진 것 같다.
알고리즘 테스트를 멀리하니 sort 같은 메서드도 사용법이 흐릿하다. 공부를 조금씩이라도 해야겠다!