자바스크립트의 sort 함수를 살펴보자.

less than 1 minute read

자바스크립트에서는 정렬을 할 때 sort 함수를 사용한다.
하지만 sort함수를 사용할 때 정말 간과하기 쉬운것이 있는데 바로 어떻게 정렬되는가이다.
오늘 단순히 sort()로만 사용했다가 잠깐 패닉에 빠져서 이렇게 정리를 남긴다.

sort함수의 정의

MDN에서는 “배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다.”라고 정의되어 있다.

하지만 정렬하는 방법에 있어서 약간의 차이가 있다면 비교함수를 전달하냐 안하냐의 차이라고 할 수 있다.

let arr1 = [1, 11, 7, 8];
arr1.sort();
// [1, 11, 7, 8]

위에 예시에서는 비교함수를 전달하지 않았다. 그래서 [1, 11, 7, 8]로 정렬이 실행된 것을 볼 수 있다.

비교함수를 전달하지 않을 때 정렬방법

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

좀 더 풀어서 쓴다면 저 숫자들을 문자로 인식하고 정렬을 했다는 것이다.
그래서 “11”이 “7”, “8”보다 앞에 정렬된 것이다.
또한 유니코드 포인트를 따르기 때문에 대문자가 소문자보다 먼저 오는 것도 알아두자.

let arr2 = ["march", "March"];
arr2.sort();
// ["March, "march"]

숫자를 정렬한다면 반드시 비교함수를 전달하자.

let arr3 = [1, 11, 7, 8];
arr3.sort((a, b) => a - b);
// [1, 7, 8, 11] 오름차순이 된다.
arr3.sort((a, b) => b - a);
// [11, 8, 7, 1] 내림차순이 된다.

이게 제일 하고 싶은 말이었다. 숫자를 정렬하는 것인지 문자를 정렬하는 것인지 잊지말고, 비교함수를 잘 전달하자.

Leave a comment