아주 간단한 문제를 풀다가 sort에 대해서 몰랐던게 있어서 정리하게 되었다.

    js에서 sort함수는 유니코드를 기준으로 진행되기 때문에 숫자를 정렬할 때 단순히 크기순으로 정렬되지 않는다.

    따라서 sort에 인자로 (a,b) => a - b 를 넣어주는데 자세한건 아래를 참고

     

    https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

     

    Array.prototype.sort() - JavaScript | MDN

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

    developer.mozilla.org

     

    (예시)

    function solution(array, commands) {
        var answer = [];
        let cpyarr = [];
        
        for(let i=0; i<commands.length; i++){
            cpyarr = array.slice(commands[i][0]-1, commands[i][1]);
            cpyarr.sort((a, b) => a - b);
            answer.push(cpyarr[commands[i][2]-1]);
        }
        
        
        return answer;
    }

     

    sort의 내부 함수의 반환 값이 0보다 작으면 a가 b보다 작은 것으로 판단하여 오름차순으로 정렬된다.

     

    0이 반환되면 순서를 바꾸지 않으며,

     

    0보다 큰 값이 반환되면 b가 a보다 먼저 오도록 정렬됩니다.

     

    (중요) 화살표 함수는 ()=> 뒤에 {} 중괄호가 와서 ()=>{} 형태가 되는 경우 중괄호 안의 코드를 단순히 '실행하는' 역할을 한다. 따라서 중괄호 내부에 return 을 써줘야만 반환값이 존재하는 함수가 된다.

     

    그런데 ()=> 이후에 () 소괄호를 써주거나 아무 괄호도 써주지 않으면 return 코드 없이 해당 값을 '반환'하게 된다.

     

    이를 통해 (a, b) => (b-a) 로 내림차순 정렬을 하거나,

    (a-b) => (a-b) 후 결과 배열에 .reverse() 를 사용해서 내림차순 정렬을 해줄수도 있다.

     

     

    (추가) 특이한건 비교할 떄 a와 b인자에서 index 순서상 a가 뒤의 숫자, b가 앞의 숫자가 온다는 것.

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기