sort() 메서드는 배열의 요소를 정렬한다.
※ sort()는 원래 배열을 덮어쓴다.
정렬 순서는 알파벳 또는 숫자가 될 수 있으며 오름차순 또는 내림차순이 될 수 있다.
기본적으로 sort() 메서드는 값을 알파벳 및 오름차순으로 문자열로 정렬한다.
const days = ['Mon', 'Wed', 'Fri', 'Sun'];
days.sort();
console.log(days);
// ["Fri", "Mon", "Sun", "Wed"] 출력
그러나 숫자를 문자열로 정렬하면 2가 1보다 크기 때문에 25가 100보다 크다.
이 때문에 sort() 메서드는 숫자를 정렬할 때 잘못된 결과를 생성한다.
const arr = [1, 3, 40, 25, 100];
arr.sort();
console.log(arr);
// [1, 100, 25, 3, 40] 출력
이 문제는 비교 함수를 작성하여 해결할 수 있다.
1. 비교 함수
- 문자열
var strings = ['Mon', 'Wed', 'Fri', 'Sun'];
function compareStr(a, b) {
if (a < b) {
return -1;
}
if (a > b) {
return 1;
}
// a == b
return 0;
}
strings.sort(compareStr);
console.log(strings);
// ["Fri", "Mon", "Sun", "Wed"] 출력
- 숫자
var numbers = [1, 3, 40, 25, 100];
function compareNum(a, b) {
return a - b;
}
numbers.sort(compareNum);
console.log(numbers);
// [1, 3, 25, 40, 100] 출력
2. 인라인 비교 함수
var numbers = [1, 3, 40, 25, 100];
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers);
// [1, 3, 25, 40, 100] 출력
3. 화살표 함수
let numbers = [1, 3, 40, 25, 100];
numbers.sort((a, b) => a - b);
console.log(numbers);
// [1, 3, 25, 40, 100] 출력
오름차순, 내림차순
※ 문자열 비교함수
- 오름차순 정렬은 a < b일 때 -1 리턴, a > b일 때 1 리턴
- 내림차순 정렬은 a < b일 때 1 리턴, a > b일 때 -1 리턴
※ 숫자 비교함수
- 오름차순 정렬은 a - b
- 내림차순 정렬은 b - a
(혹은 오름차순으로 정렬된 배열에 reverse() 메서드 사용)
'Study > JavaScript' 카테고리의 다른 글
[JavaScript] 중급 #15 - 클래스(Class) (0) | 2021.10.02 |
---|---|
[JavaScript] 중급 #14 - 상속, 프로토타입(Prototype) (0) | 2021.10.02 |
[JavaScript] 중급 #13 - call, apply, bind (0) | 2021.09.26 |
[JavaScript] 중급 #12 - setTimeout / setInterval (0) | 2021.09.26 |
[JavaScript] 중급 #11 - 클로저 (0) | 2021.09.26 |