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>



이 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>




마지막으로 다차원 배열의 정렬.

<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>







Posted by bloodguy
,