자바스크립트에는 기본적으로 정렬을 위한 메소드가 있다. 배열의 정렬 메소드인 Array.prototype.sort()가 대표적이다. sort() 메소드는 mdn에 따르면 다음과 같이 설명하고 있다.
sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다. 정렬은 stable sort가 아닐 수 있습니다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따릅니다.
기본적으로 sort 메소드는 문자열의 유니코드 코드 포인트에 따라서 정렬이 되기 때문에 sort() 메소드를 그냥 기본값으로 쓰면 숫자의 정렬이 제대로 안 된다. 다음은 예시이다.
const arr1 = [1, 30, 4, 21, 100000];
arr1.sort();
console.log(arr1);
// expected output: Array [1, 100000, 21, 30, 4] (응?)
따라서 숫자를 정렬하기 위해서는 sort() 메소드의 인자로 콜백함수를 적어주어야 한다. 아래는 예시이다.
const arr2 = [1, 30, 4, 21, 100000];
arr2.sort((a,b) => a-b); // 오름차순
console.log(arr2); // [1, 4, 21, 30, 100000]
arr2.sort((a,b) => b-a); // 내림차순
console.log(arr2); // [100000, 30, 21, 4, 1]
주의해야 할 것은 Array.prototype.sort() 메소드는 원본을 변화시키는 메소드라는 점이다.(mutable함) 따라서 원본을 보존하기 위해서는 spread syntax, Array.prototype.slice() 등을 사용하여 배열을 복사한 뒤에 사용해야 된다.