오늘은 간단하게 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 코드 단위 값
으로 정렬하므로 원하는 결과와 다른 거시지요! - 혹시 더 자세하게 알고 싶다면 이 링크를 클릭하세요!
반응형
'개발 기술 > 개발 이야기' 카테고리의 다른 글
SOLID 윈칙 (solid principle) (0) | 2021.10.25 |
---|---|
1~N까지의 숫자 배열 만들기(with js) (0) | 2021.09.27 |
vue앱을 최적으로 개발해보자! (0) | 2021.09.27 |
원 변형시키기(with border-left-color, border-right-color) (0) | 2021.09.26 |
js로 드래그한 글자 선택하기(with selection) (0) | 2021.09.25 |
댓글