JavaScript sort().. 1000이 2보다 작다고?

sun_ovo·2024년 9월 25일
0

Array = [ 1000, 2, 1]
Array.sort()의 결과는 무엇일까?

자연스러운 논리로는 Array = [1, 2, 1000]이 되어야 한다.
하지만 JavaScript는 Array = [1, 1000, 2]를 반환한다.

이는 JavaScript의 sort()함수는 “문자열의 유니코드 코드 포인트”를 따르기 때문이다.

의도한 결과를 만들기 위해서는 compareFunction을 제공해야 한다.
compareFunction의 판단 논리는 다음과 같고, 이러한 반환 값에 따라 정렬된다.

  • compareFunc(a, b) > 0 : a < b
  • compareFunc(a, b) = 0 : a === b
  • compareFunc(a, b) < 0 : a > b

만약 숫자를 비교한다면 compareFunc를 다음과 같이 정의할 수 있다

function compareNumbers(a, b) {
	return a - b;
}

이는 다음과 같이 활용 가능하다
let array = [14, 2, 5, 1, 3]

// 방법 1
function compareNumbers(a, b) {
	return a - b;
}

array.sort(compareNumbers);

// 방법 2
array.sort((a, b) => a - b);

+) map을 사용한 정렬

  • compareFunction은 배열 내의 요소마다 여러 번 호출되므로 높은 오버헤드가 발생할 수 있음
  • compareFunction이 복잡하고, 정렬 요소가 많을 경우 map을 사용하는 것이 좋음

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

profile
개발자의 기초 다지기 ₍ ᐢ. ̫ .ᐢ ₎

0개의 댓글