테스트 사이트 - 개발 중인 베타 버전입니다

자바스크립트 sort()를 이용한 숫자 정렬

· 18년 전 · 4149
자바스크립트에서 sort는 기본적으로 아스키값을 기준으로 정렬합니다.

그래서 2보다 10이 앞에 오죠.


숫자 정렬되게 sort용 함수를 만들어봤습니다.

# 음수는 -가 제일 앞에 와야 제대로 정렬합니다.
뒤에 붙으면 문자로서의 -와 기능적으로 구분하기가 거의 불가능하므로 그냥 문자 취급합니다.


function sort2(a,b)
{
    if(parseInt(a) > parseInt(b)) return 1;
    else if(parseInt(a) < parseInt(b)) return -1;
    else
    {
        var sort = new Array(a,b);
        sort.sort();
        return (sort[0] == a)?-1:1;
    }
}

간단하게 했지만, 문자 뒤에 오는 숫자는 역시 제대로 정렬되지 않습니다.

아래는 문자 뒤의 숫자도 정렬하게 만든 것.


function sort(a,b)
{
    aS = a.toString(10).toUpperCase();
    bS = b.toString(10).toUpperCase();
    if(aS == bS) return 0;

    while(aS || bS)
    {
        aS = aS.replace(/^((\-?\d*)[^\d]*)/,"");
        aT = RegExp.$1;
        aN = RegExp.$2;

        bS = bS.replace(/^((\-?\d*)[^\d]*)/,"");
        bT = RegExp.$1;
        bN = RegExp.$2;
    
        if(aN && bN && aN != bN) return Number(aN)>Number(bN)?1:-1;
        else if(aT != bT)
        {
            var sort = new Array(aT,bT);
            sort.sort();
            return (sort[0] == aT)?-1:1;
        }
    }
}

덧붙여서 대소문자 구분하지 않고 정렬합니다.
[이 게시물은 관리자님에 의해 2011-10-31 16:57:14 JavaScript에서 이동 됨]

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

게시글 목록

번호 제목
12201
12200
29244
12196
29243
12188
12184
29231
29230
12181
기타 툴팁 2
29229
12179
12177
12173
29226
12172
25007
12171
12170
29225
12167
12166
12157
12154
12153
25002
12151
29224
12148
29223
12142
29217
12141
12136
12132
12130
29216
29215
12126
12124
12122
12120
12111
25001
25000
24999
24998
24997
24994
24985
12109
12105
12104
12096
12094
12091
12090
12079
29211
12072
29210
12070
29207
12067
12061
29204
12058
12057
12056
24984
12055
12053
12051
MySQL apm 1
12050
MySQL LOG
12049
12048
기타 dhcp
12047
12046
12045
12044
12043
JavaScript vi
12042
기타 Nis/NFS
12041
12040
JavaScript
12039
기타 Process
12038
12037
12036
12035
JavaScript Quota
12034
MySQL LOG
12033
12032
12031
JavaScript IPCHAINS
12028
12026
12025
12020
12017
12015
12013