2/10/2021

json key 값으로 정렬하기

아래와 같은 데이터가 있고, 그것을 출력해보겠습니다.

<script>

let data = [
    {
        "name"  : "가루1",
        "age"   : 21,
        "money" : 67000
    },
    {
        "name"  : "가루2",
        "age"   : 59,
        "money" : 21000
    },
    {
        "name"  : "가루3",
        "age"   : 7,
        "money" : 38000
    }
];

console.log(data);

</script>

name으로 정렬하면, data[0] → data[1] → data[2] 순서가 되겠지만
age로 정렬하면, data[2] → data[0] → data[1] 이고
money로 정렬하면, data[1] → data[2] → dta[0] 입니다.

지금은 다행히(?) 입력한 순서가 name순서로 되어있어서 딱히 문제는 없습니다만.. 만약 age나 money로 정렬해야할때 어떻게해야하나 싶습니다.

다중 반복문을 이용하여 정렬하고픈 순서의 인덱스값을 파악하고, 그 파악한 인덱스값으로 새로운 데이터를 생성해야하는 방법도 있지만... 다중 반복문은 솔직히 너무 지저분합니다.

이런 함수를 작성합니다.

function arrOrder(key) {
    return function(a, b) {
        if (a[key] > b[key]) {    
            return 1;    
        } else if (a[key] < b[key]) {    
            return -1;    
        } 
        
        return 0;    
    }    
}

a와 b는 현재값과 다음값이고, key는 name이나 age..즉 말그대로 key값입니다.

<script>

function arrOrder(key) {
    return function(a, b) {
        if (a[key] > b[key]) {    
            return 1;    
        } else if (a[key] < b[key]) {    
            return -1;    
        } 
        
        return 0;    
    }    
}

let data = [
    {
        "name"  : "가루1",
        "age"   : 21,
        "money" : 67000
    },
    {
        "name"  : "가루2",
        "age"   : 59,
        "money" : 21000
    },
    {
        "name"  : "가루3",
        "age"   : 7,
        "money" : 38000
    }
];

data.sort(arrOrder("money"));
console.log(data);

</script>

출력된걸 보면 처음과 별다를거 없네요.

arrOrder함수에 넣어줄 키값을 age로 변경해줍니다.

그럼 입력받은 age를 기준으로 정렬됩니다.

money로 바꾸면, money를 기준으로 정렬됩니다.

게시물 수정
  1. 윗 부분에 오타가 조금 나 있네요.

    age로 정렬하면, data[2] → data[0 → data[1] 이고
    money로 정렬하면, data[1] → data[2 → dta[0] 입니다.

    답글삭제
    답글
    1. 안녕하세요? 방문해주셔서 감사합니다.

      오타는 삭삭 수정하겠습니다+_+;

      삭제