자바스크립트의 Sort함수 이해

Jaewoooook·2021년 7월 19일
5

Sort()란?

sort 메서드는 배열의 요소를 정렬하는데 사용하는 함수이다.

const String=['b','c','a'];

String.sort();

위의 코드를 확인하면 a,b,c 로 올바른 정렬의 형태로 출력이 될것이다.

const Digit=[11,2,5,20,8];
Digit.sort();

이런식으로 정렬을 한다면 예상으로는 2,5,8,11,20 이라고 나올 것으로 예상 할 수 있다.

하지만, Sort()는 기본적으로 유니코드값으로 정렬하기 때문에 예상과 다르게
11,2,20,5,8로 정렬되는 모습을 확인할 수 있다.

그러므로 숫자를 정렬하려면

Digit.sort((previous, current) => previous-current); //오름차순
Digit.sort((previous, current) => current-previous); //내림차순

이렇게 정렬해주면 오름 or 내림차순으로 숫자 정렬을 할 수 있다.

Sort함수 응용

compareFunction 개념

위의 숫자를 정렬하기 위해 사용한 것이 compareFunction이다.

const numbers=[0,5,4,1,2];
numbers.sort((a,b)=>a-b); //오름차순

반환 값 < 0 : a가 b보다 앞에 있어야 한다.
반환 값 = 0 : a와 b의 순서를 바꾸지 않는다.
반환 값 > 0 : b가 a보다 앞에 있어야 한다.

이러한 원리를 이용해서 정렬을 하는 것이다.

조건부 정렬

const numbers=[0,5,4,1,2];
numbers.sort((a,b)=> { //오름차순
	if(a>b) {
    	return 1;
    } else if(a<b) {
    	return -1;
    } else {
    	return 0;
    }
//결과 0,1,2,4,5

위의 조건부 정렬도 다채롭게 사용하면 여러가지 조건으로 정렬을 할 수 있다.
compareFunction을 이용해서 동작한다.

간단하게 설명하자면 a=0 b=5를 비교하여 0<5 이기 때문에 -1을 반환한다.
그래서 a가 b보다 앞에 있는게 맞기 때문에 변동은 없지만 0처럼 변동이 없는 것은 아니다.

a=4, b=1일때는 a>b이기 때문에 1을 반환한다.
그래서 b가 a보다 앞에 있어야 하기때문에 1,4의 순서로 정렬된다.

다차원 정렬

const numbers=[[1,4,5],[3,1,2],[2,5,6]];
numbers.sort((a,b)=> a[0]-b[0]); //오름차순
//결과 [[1,4,5],[2,5,6],[3,1,2]]

2차원 배열인 numbers의 각행의 1열들을 기준으로 해서 정렬할 수 있는 방법이다.
다차원의 배열도 각자의 기준을 정할때 참고하면 유용하게 사용할 수 있다.

참고문서
Array.prototype.sort() - JavaScript MDN Mozilla

0개의 댓글