[JavaScript]내림차순정렬 - sort(),reverse()

Joe·2022년 10월 28일
2
post-thumbnail

주어진 숫자에 대해(배열안에 요소이거나 단순히 숫자들 이거나) 오름차순, 내림차순으로 정렬하는 방법은 정말 여러가지 많을 것이다. 그 중 자바스크립트 내부에서 정렬을 도와주는 sort 메서드를 살펴보려 한다.


sort() - 숫자정렬

  • 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다

    기본정렬 순서는 문자열의 유니코드 코드 포인트를 따른다.

유니코드의 포인트를 따르기에 숫자정렬에서 9가 80보다 앞에 오지만 문자열로 변환되면 그 결과는 달라진다.(만일 한자릿수 비교라면 단순히 sort()로도 가능하다. 두자릿수이상의 숫자도 포함되어있다면 꼭 함수 사용해야함!)

그렇기에 sort() 내부에서 함수를 사용하여 정렬을 정해줘야 한다.

    const a = [5,2,3,7,19,1];

    const asc = a.sort((a,b)=>(a-b));
    //결과값 : [ 1, 2, 3, 5, 7, 19 ]

    const des = a.sort((a,b)=>(b-a));
    //결과값 : [ 19, 7, 5, 3, 2, 1 ]

해당함수는 배열 객체들을 두개씩 받아 비교하고 a-b의 값이 음수인 경우 앞에다 배치하며 +값일수록 뒤에 배치하는 방식이다.

reverse()

  • 배열의 순서를 반전!
	const a = [1, 2, 3];
    console.log(a); // [1, 2, 3]

    a.reverse();
    console.log(a); // [3, 2, 1]

즉, 먼저 sort()로 정렬을 해주고 reverse()를 사용해주면 정렬된 배열의 순서를 반전시키기에 배열을 내림차순으로 정렬할 수 있는 것이다.

const num = [2,6,4,7,1]
const des = num.sort().reverse();
console.log(des)
// 결과값
[7,6,4,2,1]

[프로그래머스] 정수 내림차순으로 배치하기

<문제 설명>
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

<입출력 예>
n = 118372
return 873211

<나의답안>

function solution(n) {
    const nToArr = Array.from(n.toString()).sort().reverse();
    const arrToN = nToArr.toString().replaceAll(",","") - 0;
    return arrToN
}

console.log(solution(118372));력하세요

<설명>
제일 먼저 숫자로 들어온 변수를 Array.from(n)으로 한자리씩 나눠 배열에 요소로 만들어줬고 sort()를 사용해서 오름차순정렬 후 reverse()를 통해 내림차순으로 정려해주었다. 그렇게 만들어진 배열을 숫자형으로 바꿔주기 위해 arrToN의 과정을 거쳤다. 먼저 배열을 toString()으로 문자형으로 바꿔주면 '8,7,3,2,1,1'의 형태가 나오고 replaceAll을 통해 콤마를 없애 '873211'의 형태로 만들었다.
마지막으로!! 문자열의 형태를 숫자형으로 바꿔주기 위해 0이라는 숫자를 빼줘서 최종적으로 숫자형의 값을 Return할 수 있게 되었다.

(문자열에 숫자형을 더해주면 자동적으로 문자열을 반환하지만 문자열에서 숫자형을 빼주면 문자열에 빼는 개념(?)은 없기에 자동적으로 숫자형으로 반환함!)


처음에 문제를 보았을때 막막하기만 했지만 주어진 상황에서 하나하나 해결해나가는 그 느낌이 오늘 역시 짜릿했다. 짜릿함에서 끝나지 않고 기록을 통해 짜릿함을 계속 이어나가도록 하겠다.

profile
Creator

1개의 댓글

comment-user-thumbnail
2022년 11월 11일

wow! 내림차순과 reverse에 대하여 제대로 배울 수 있었네요!

답글 달기