본문 바로가기

JavaScript

객체 정렬하기

코딩을 하다보면 빈번하게 객체를 정리 해야하는 경우를 만나게 된다. 

배열의 경우엔 Sort 함수를 사용하면 되지만 객체의 경우엔 몇 가지 제약이 있다. 

 

기본적으로 Object를 저장형 데이터로 사용할 경우에는 Object를 사용하기 보단 Map을 사용하는 것이 

좋다. 어쩔수 없이 Object를 사용하는데 정렬이 필요할 때 참고 바랍니다!

 

다양한 해결 방법이 있었는데, 그중 하나를 정리한다. 

let object = {
    a : 20,
    b : 30,
    c : 40,
    d : 35,
}

형식의 객체가 있다고 했을 때 Value를 기준으로 정리하는 방식이다. 

 

const sortObject = [];

for(const item in object) {
    sortObject.push([item, object[item]]);
}

sortObject.sort((a,b) => {
    return a[1] - b[1];
})

배열로 변환한 다음 Sort 함수를 사용해서 정렬하는 방식이다. 

Object.keys를 사용하는 방법도 있지만 배열로 변환해서 정렬하는 방식이 더 많은 상황에서

사용할 수 있다고 생각이 들어서 결정했다. 

 

const sortObject = [];

for(const item in object) {
    sortObject.push([item, object[item]]);
}

sortObject.sort((a,b) => {
    if(a[1] > b[1]) {
    	return -1;
    }else if(a[1] === b[1]) {
    	return b[0] - a[0];
    }else {
    	return 1;
    }
    return a[1] - b[1];
})

만약 Object의 value만 비교하는 것이 아닌 value가 같은 경우 key를 보고 정렬하는 상황도 조금만

수정해주면 정렬이 가능하다. 

 

만약 Map을 사용한다면 

const mapData = new Map();
mapData.set(1,123);
mapData.set(2,345);
mapData.set(3,789);

const mapToArray = [...mapData];

사용해서 배열로 변경 후 동일하게 사용하면 된다. 

반응형