JavaScript

[JavaScript] 문자열 정렬하기 (+예제, sort()이해)

SangRok Jung 2022. 4. 16. 00:56
반응형

 

 

들어가기 사전 지식

 

sort()를 먼저 이해하고 진행한다.

 

 

 

https://cruella-de-vil.tistory.com/45

 

[JavaScript] sort(), 오름차순 정렬, 내림차순 정렬

Array.prototype.sort() sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다. 정렬은 stable sort가 아닐 수 있습니다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따

cruella-de-vil.tistory.com

 

 

 

 

 

 

이해

sort() 안에 compareFunction을 사용해야 여러 상황에서 오름차순 및 내림차순이 가능하다.

function compare(a, b) {
  if (<상황>) {
    return -1; //a가 b보다 먼저 옵니다.
  }
  if (<상황>) {
    return 1; //b가 a보다 먼저 옵니다.
  }
  else 
  return 0; //변하지 않습니다.
}

 

 

 

 

 

 

예제

아래 객체를 id를 기준하여 root가 먼저오는 오름차순으로 소팅하는 함수를 만드시오.

<body>
    <script>
        //아래 객체를 id를 기준하여 root가 먼저오는 오름차순으로 소팅하는 함수를 만드시오.


        const account = [
            {id : 'jsh', addr : '서울'},
            {id : 'root2', addr : '인천'},
            {id : 'ghd', addr : '광주'},
            {id : 'root3', addr : '경기'},
            {id : 'root5', addr : '경북'},
            {id : 'rnv', addr : '세종'},
            {id : 'ekz', addr : '전북'},
            {id : 'gae', addr : '전남'},
            {id : 'root4', addr : '전남fds'},
            {id : 'root1', addr : '전남fds'}
        ]

        const compare = function(a, b) {

            if ((b.id.indexOf('root') === 0) && (a.id.indexOf('root') === 0)){
                let newA = a.id.split('root')
                let newB = b.id.split('root')

                if (newA[1] > newB[1]){
                    return 1;
                }
                else if (newA[1] < newB[1]){
                    return - 1;
                }
                else {
                    return 0;
                }
            }
            else if ((a.id.indexOf('root') === 0)){
                return -1;
            }
            else if ((b.id.indexOf('root') === 0)){
                return 1;
            }

            else 
            {
                if (a.id > b.id) {
                    return 1;
                }
                else if (a.id < b.id) {
                    return -1;
                }
                else {
                    return 0;
                }
            }
        };

       
        console.log(account.sort(compare))

    </script>
</body>
반응형