개발 기술/개발 이야기

sort()로 숫자 정렬하기

by GicoMomg (Lux) 2021. 9. 27.

오늘은 간단하게 js의 sort()에 대해 알아볼까 하는데요!
그런데 이 sort()만 사용해서는 숫자를 정렬할 수 없습니다. 왜 그런지 한 번 알아볼까요?


1. sort()로 문자 정렬

  • sort로 문자열을 정렬하는 방법은 간단합니다.
  • sort함수는 요소를 문자열로 변환 한 후, UTF-16 코드 단위 값을 비교하여 정렬을 합니다.
  • 그래서 문자의 경우, 아래와 같이 작성하면 오름차순 정렬이 가능한 것이지요~

주의, 이 함수는 원본 배열을 변형시킵니다,
원본 배열이 변형되는 걸 원치 않는다면 먼저 slice()로 배열을 복사합시다

texts = ['aa', 'b', 'd', 'c']
texts.sort()
console.log(texts)
// ['aa', 'b', 'c', 'd']

"아 그렇다면, 이 sort()함수로 숫자를 간편하게 오름차순 정렬할 수 있겠네요?"

오~ 답은, 아닙니다!



2. sort()로 숫자 정렬

  • 아래와 같은 코드를 봅시다.
    const nums = [1, 30, 21, 100000];
    nums.sort();
    console.log(nums);
    // [1, 100000, 21, 30]
  • 여러분들은 숫자가 오름차순 될 거라고 생각했지만, 결과는 아니군요!

아니, sort()로 오름차순 정렬할 수 있다면서요;; 거짓말이었어요?? (황당)

거짓말이 아닙니다 ^0^
단지 sort()안에 어떠한 코드를 더 작성해야 하지요~


  • 아래는 sort() + 비교 함수를 이용하여 숫자를 정렬한 모습입니다.

    const nums = [1, 30, 21, 100000];
    nums.sort((a,b) => a - b);
    console.log(nums);
    // [1, 21, 30, 100000]
  • 만약 숫자를 내림차순 하고 싶다면, 아래와 같이 작성하면 됩니다.

    const nums = [1, 30, 21, 100000];
    nums.sort((a,b) => b - a);
    console.log(nums);
    // [100000, 30, 21, 1]

3. 도대체 왜?

아니 도대체 숫자는 저렇게 비교함수를 추가해서 정렬해야 하죠? - -

  • 이유는 sort()의 특성 때문입니다.
  • 혹시 앞서, 제가 sort()는 요소를 문자열로 변환 한 후, UTF-16 코드 단위 값으로 비교한다고 하지 않았나요?
  • 네, 맞습니다~ 저희가 숫자를 sort()를 이용해 오름차순 정렬을 하려고 해도, sort() 자체가 UTF-16 코드 단위 값으로 정렬하므로 원하는 결과와 다른 거시지요!
  • 혹시 더 자세하게 알고 싶다면 이 링크를 클릭하세요!
반응형

댓글