프로그래밍 언어/JavaScript

JavaScript) 객체 키 이름으로 정렬. Object Key 값으로 정렬

luana_eun 2023. 12. 28. 10:52
728x90

 

데이터를 가공하다보면 아래와 같이 키 이름이 정렬이 안되어있을때가 있다. 

 

이 Object를 키 이름 순으로 정렬하려고 한다. 

ex) TOTALTM -> price01 -> price02 -> price03 -> 결제상태

 

 

 

 

그 전에, Object가 아닌  배열 하나의 정렬 부터 해보자면 아래와 같이 할 수 있다. 

let test = {"TOTALTM":1, "price02":20, "price03":1000, "price01":200, "결제상태":"주문완료"}

Object.keys(test).sort().reduce((n,key) => {
     n[key] = test[key];
     return n;
  }, {}
);

 

1)  Object.keys()  : 배열의 키 만 모아서 배열로 반환한다. 
     ex) Object.keys(test)    =>   ['TOTALTM', 'price02', 'price03', 'price01', '결제상태']

 

2)  sort()  : 배열을 정렬한다. 

     ex) Object.keys(test) .sort()    =>   ['TOTALTM', 'price01', 'price02', 'price03', '결제상태']

     여기까지하면 벌써 키 이름으로 정렬이 됐다. 

     이제 키에 맞는 값을 대입하면된다. 

 

3) reduce(acc, cur) : 배열을 돌면서 주어진 함수를 실행하고 결과값을 반환한다. 

  • acc(accumulator) : 누산기, 누적되어 최종적으로 출력되는 값
  • cur(current) : 현재 요소

   test[key]로 값을 찾아서 그 값을 새로운 배열 n[key]에 넣어주면서 정렬된 배열 n을 반환한다. 

 

 

 

 

여기까지 배열 하나의 정렬이 이해됐으면 객체는 배열이 모인것이므로

응용하여 반복문을 통해 정렬할 수 있다. 

 

객체 예제

let test = [
    {"TOTALTM":1, "price02":20, "price03":1000, "price01":200, "결제상태":"주문완료"}, 
    {"TOTALTM":5, "price02":10, "price03":2000, "price01":300, "결제상태":"취소"},
    {"TOTALTM":7, "price02":10, "price03":5000, "price01":500, "결제상태":"주문완료"}
]

 

 

키 이름으로 정렬

let totalSortList = [];
let tempList;

for(let i in test) {
    let val = test[i];

    tempList = Object.keys(val).sort().reduce((n,key) => {
        n[key] = val[key];
        return n;
    }, {})

    totalSortList.push(tempList)
}

 

정렬된 배열 하나하나 반환된거를 totalSortList에 추가하여

최종 정렬된 Object를 출력했다. 

 

 

 

키 이름으로 정렬이 아닌, 객체의 값으로 정렬을 알고싶다면 아래 링크 클릭!

https://luanaeun.tistory.com/254

 

 

 

도움이되었다면 좋아요 눌러주세요~

728x90