JavaScript는 Array 객체에 sort() method를 제공한다.
그냥 호출하면 문자열 정렬을 하는 듯.
<script>
var arr = new Array(52.5, 369, 1.14, 0.98, 7.31);
arr.sort();
document.write(arr);
// 결과는 아래와 같음
// 0.98,1.14,369,52.5,7.31
</script>
var arr = new Array(52.5, 369, 1.14, 0.98, 7.31);
arr.sort();
document.write(arr);
// 결과는 아래와 같음
// 0.98,1.14,369,52.5,7.31
</script>
이 sort() 함수를 오버라이딩해서 custom sort가 가능하다.
<script>
// 견본배열
var arr = new Array(52.5, 369, 1.14, 0.98, 7.31);
// 일단 한 번 출력해보면 배열 그대로 출력이 된다.
document.write(arr+'<br />');
// custom sort
// 문자열, 정수, 실수의 비교를 하려면 미리 타입캐스팅을 해두고 비교하면 된다.
// return 에 있는 부등호의 방향을 뒤집으면 역정렬.
arr.sort(function (a1, a2) {
// 문자열 비교 (toLowerCase()는 대소문자 구분없이 하기 위함)
a1 = a1.toString().toLowerCase();
a2 = a2.toString().toLowerCase();
// 정수
//a1 = parseInt(a1);
//a2 = parseInt(a2);
// 실수
//a1 = parseFloat(a1);
//a2 = parseFloat(a2);
return (a1<a2) ? -1 : ((a1>a2) ? 1 : 0);
});
// 원하는대로 정렬이 되었음을 확인가능하다.
document.write(arr);
</script>
// 견본배열
var arr = new Array(52.5, 369, 1.14, 0.98, 7.31);
// 일단 한 번 출력해보면 배열 그대로 출력이 된다.
document.write(arr+'<br />');
// custom sort
// 문자열, 정수, 실수의 비교를 하려면 미리 타입캐스팅을 해두고 비교하면 된다.
// return 에 있는 부등호의 방향을 뒤집으면 역정렬.
arr.sort(function (a1, a2) {
// 문자열 비교 (toLowerCase()는 대소문자 구분없이 하기 위함)
a1 = a1.toString().toLowerCase();
a2 = a2.toString().toLowerCase();
// 정수
//a1 = parseInt(a1);
//a2 = parseInt(a2);
// 실수
//a1 = parseFloat(a1);
//a2 = parseFloat(a2);
return (a1<a2) ? -1 : ((a1>a2) ? 1 : 0);
});
// 원하는대로 정렬이 되었음을 확인가능하다.
document.write(arr);
</script>
마지막으로 다차원 배열의 정렬.
<script>
// 이름, 나이 배열을 item으로 가지는 다차원 배열 정의
var arr2 = new Array();
arr2[0] = new Array('백충덕', 31);
arr2[1] = new Array('bloodguy', 20);
arr2[2] = new Array('nicehide', 19);
arr2[3] = new Array('racoonx', 48);
arr2[4] = new Array('mindriot', 23);
// 그냥 출력해봄
document.write(arr2);
document.write('<br />');
// iIdx로 인덱스 번호를 지정하여,
// 이름, 나이별로 정렬이 가능함.
arr2.sort(function (a1, a2) {
var idx = 0; // 이름
//var idx = 1; // 나이
switch (idx) {
case 0: // 이름 - 문자열 정렬 (사실 기본이라 아무것도 안해도 됨)
a1[idx] = a1[idx].toString().toLowerCase();
a2[idx] = a2[idx].toString().toLowerCase();
break;
case 1: // 나이 - 정수변환
a1[idx] = parseInt(a1[idx]);
a2[idx] = parseInt(a2[idx]);
break;
}
return (a1[idx]<a2[idx]) ? -1 : ((a1[idx]>a2[idx]) ? 1 : 0);
});
document.write(arr2);
</script>
// 이름, 나이 배열을 item으로 가지는 다차원 배열 정의
var arr2 = new Array();
arr2[0] = new Array('백충덕', 31);
arr2[1] = new Array('bloodguy', 20);
arr2[2] = new Array('nicehide', 19);
arr2[3] = new Array('racoonx', 48);
arr2[4] = new Array('mindriot', 23);
// 그냥 출력해봄
document.write(arr2);
document.write('<br />');
// iIdx로 인덱스 번호를 지정하여,
// 이름, 나이별로 정렬이 가능함.
arr2.sort(function (a1, a2) {
var idx = 0; // 이름
//var idx = 1; // 나이
switch (idx) {
case 0: // 이름 - 문자열 정렬 (사실 기본이라 아무것도 안해도 됨)
a1[idx] = a1[idx].toString().toLowerCase();
a2[idx] = a2[idx].toString().toLowerCase();
break;
case 1: // 나이 - 정수변환
a1[idx] = parseInt(a1[idx]);
a2[idx] = parseInt(a2[idx]);
break;
}
return (a1[idx]<a2[idx]) ? -1 : ((a1[idx]>a2[idx]) ? 1 : 0);
});
document.write(arr2);
</script>
'JavaScript' 카테고리의 다른 글
[JavaScript] PHP의 pack() 함수 흉내내기 (0) | 2010.12.03 |
---|---|
[JavaScript] HTML페이지에서 드래그로 문자열 선택 금지 (disable text selection include firefox) (0) | 2010.11.19 |
[JavaScript] MD5 (0) | 2010.09.16 |
[JavaScript] URI encoding (0) | 2010.04.01 |
[JavaScript] 새창 조작 (0) | 2010.03.11 |