[JavaScript] Array.sort([compareFunction])

전인혁·2022년 7월 20일
0

JavaScript 문법

목록 보기
2/2
post-thumbnail
post-custom-banner

설명

알고리즘 풀이를 할 때, 숫자 배열을 정렬할 때면 Array.sort() 메소드가 의도대로 동작하지 않을 때가 있었다.
그 이유는 바로, sort()가 String 자료형을 기준으로 정렬해주기 때문이다.
MDN에서 참고하여, optional 매개변수로 compareFunction을 넣어주면 내가 원했던 숫자 정렬을 할 수 있었다.


Array.sort()

배열의 요소를 적절한 위치에서 정렬하고, 그 배열을 반환한다.
(새로운 배열 반환 X)

const fruits = ["banana", "apple", "orange", "kiwi"];
fruits.sort();

console.log(fruits);
// 결과 : [ 'apple', 'banana', 'kiwi', 'orange' ]

문제점

Array.sort()의 문제는 다음과 같은 상황에서 발생한다.

const numbers = [3, 1, 100, 60];
numbers.sort();

console.log(numbers);
// 결과 : [ 1, 100, 3, 60 ]

그 이유는 위에서 설명했듯, sort()가 기본적으로 String을 기준으로 정렬하기 때문이다. 그래서 사전상 오름차순인 [1, 100, 3, 60]과 같은 결과가 나온 것이다.

이를 숫자로 비교하고 싶다면, compareFunction을 활용해야한다.


Array.sort([compareFunction])

Array.sort() 메소드는 매개변수로 compareFunction를 받는다.
compareFunction의 동작원리는 다음과 같다.

compareFunction은 2개의 매개변수를 입력받는다. (a, b)
만약, compareFunction의 리턴 값이 양수라면, b다음 a가 오도록 정렬한다,
반대로, compareFunction의 리턴 값이 음수라면, a다음 b가 오도록 정렬한다.

const numbers = [3, 1, 100, 60];
numbers.sort(function (a, b) {
  return a - b;
});
// 이를 화살표 함수로 표현하면, numbers.sort((a,b) => (a-b)); 
console.log(numbers);
// 결과 : [ 1, 3, 60, 100 ]

profile
Front-end Developer
post-custom-banner

0개의 댓글