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] 입니다.
안녕하세요? 방문해주셔서 감사합니다.
삭제오타는 삭삭 수정하겠습니다+_+;
댓글에 <a>, <b>, <i> 태그를 사용할 수 있습니다.
댓글에 HTML/Javascript를 입력해야할 경우, 반드시 HTML 태그 (부등호) 변환을 이용해 변환한 뒤 입력해주세요.
댓글로 작성하기 어렵거나, 첨부 파일이 있는 경우 메일(kuzuro@gmail.com)로 보내주세요.
블로그 정보 및 규칙은 블로그 어바웃에서 확인하실 수 있습니다.