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열들을 기준으로 해서 정렬할 수 있는 방법이다.
다차원의 배열도 각자의 기준을 정할때 참고하면 유용하게 사용할 수 있다.