꾸준히 합시다
Array.prototype.sort() 특정 기준으로 정렬하기 + Sequelize ORM 본문
프론트에서 상품 결제를 요청할 때 해당 상품의 현재 상태를 조회하기 위해 아래와 같은 코드를 작성했다.
let itemList = await Item.findAll({
where: {
itemName: itemNames
},
attributes: ['id', 'itemName', 'stock', 'sold', 'status']
});
itemNames는 결제를 원하는 상품의 이름만 담긴 배열인데, 프론트에서 보낸 전체 상품 정보 객체 배열에서 각 상품의 이름만 따로 저장한 것이다. (예: ['토스터기', '무선 게이밍 마우스'])
해당 상품만 조회하는 것까지는 문제 없었지만, 결괏값이 itemNames의 index 순이 아니라 DB에 저장된 해당 상품의 id 순으로 정렬이 되어 나온 것이 문제였다. 만약 오름차순이나 내림차순 정렬이라면 asc이나 des 키워드로 손쉽게 정렬을 할 수 있었겠지만 특정한 기준을 가지고 정렬하는 건 Sequelize ORM에 내장되어 있는 기능은 아닌 듯했다
// 조회 결괏값 (Item 테이블에 저장된 id순으로 정렬)
[
{ id: 7, itemName: '무선 게이밍 마우스', stock: 8, sold: 2, status: '판매중' },
{ id: 13, itemName: '토스터기', stock: 0, sold: 8, status: '품절' }
]
// 원하는 값 (id순이 아니라 itemNames의 index순으로 정렬)
[
{ id: 13, itemName: '토스터기', stock: 0, sold: 8, status: '품절' },
{ id: 7, itemName: '무선 게이밍 마우스', stock: 8, sold: 2, status: '판매중' }
]
원하는 결괏값을 얻기 위해 아래와 같이 Array.prototype.sort()를 이용했다.
itemList.sort((a, b) => itemNames.indexOf(a.itemName) - itemNames.indexOf(b.itemName));
'자바스크립트 기초' 카테고리의 다른 글
모던 자바스크립트 Deep Dive 내용 정리 - 04장 변수 (0) | 2022.08.03 |
---|---|
var, let, const의 차이점 (0) | 2022.06.06 |
변수: 선언, 초기화, 할당 (0) | 2022.06.01 |
call by value, call by reference in JS (0) | 2021.12.21 |
스코프와 호이스팅 Scope and Hoisting (0) | 2021.12.03 |
Comments