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를 기준으로 정렬됩니다.
윗 부분에 오타가 조금 나 있네요.
답글삭제age로 정렬하면, data[2] → data[0 → data[1] 이고
money로 정렬하면, data[1] → data[2 → dta[0] 입니다.
안녕하세요? 방문해주셔서 감사합니다.
삭제오타는 삭삭 수정하겠습니다+_+;