sort()만으로는 숫자를 정렬할 수 없다

gicomong·2021년 1월 26일
2

개발이야기

목록 보기
2/2
post-thumbnail

안녕하세요, Gicomong 입니다.
오늘은 간단하게 js의 sort()에 대해 알아볼까 하는데요!
~~(평소 같으면 알고리즘이나 트렌드에 대해 쓰려고 했지만, 요즘 바쁜지라..ㅎㅎ;)~~
여러분들은 문자나 숫자를 정렬할 때 어떤 함수를 사용하시나요?

저는 주로 sort()를 사용하는데요,
그런데 이 sort()만으로 완.벽.한 정렬을 할 수 있다면, 큰 오산입니다! (두둥)

아래 코드를 한 번 볼까요?


sort()로 문자 정렬

  • sort로 문자열을 정렬하는 방법은 간단합니다.
  • sort함수는 요소를 문자열로 변환 한 후, UTF-16 코드 단위 값을 비교하여 정렬을 합니다.
  • 그래서 문자의 경우, 아래와 같이 작성하면 오름차순 정렬이 가능한 것이지요~
    주의, 이 함수는 원본 배열을 변형시킵니다,
    원본 배열이 변형되는 걸 원치 않는다면 먼저 slice()로 배열을 복사합시다
texts = ['aa', 'b', 'd', 'c']
texts.sort()
console.log(texts)
// ['aa', 'b', 'c', 'd']

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

오~ 답은, 아닙니다! x_x)!


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]

도대체 왜?

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

  • 이유는 sort()의 특성 때문입니다.
  • 혹시 앞서, 제가 sort()는 요소를 문자열로 변환 한 후, UTF-16 코드 단위 값으로 비교한다고 하지 않았나요?
  • 네, 맞습니다~ 저희가 숫자를 sort()를 이용해 오름차순 정렬을 하려고 해도, sort() 자체가 UTF-16 코드 단위 값으로 정렬하므로 원하는 결과와 다른 거시지요!
  • 혹시 더 자세하게 알고 싶다면 이 링크를 클릭하세요!
profile
⚠ 이 블로거는 퇴근 후 극심한 피로감 + 강렬한 휴식 욕구로 인해 일주일 이상 포스팅이 없을 수 있습니다. 하지만 항상 좋은 내용을 담고자 합니다🙇🏼

0개의 댓글