안녕하세요. 박기린 입니다.
이번에는 Array를 정렬하는 메소드인 sort()에 대해 알아보겠습니다.
Array.prototype.Array()
const owners = ['j', 'z', 'a', 'm'];
owners.sort();
console.log(owners) // [a, j ,m ,z] <- 원본도 변형된 모습.
Array이름.sort( 비교함수 )
-> 비교함수의 구성
(a, b) => {
{ a와 b를 비교하는 함수 }
}
a : Array의 elements 중, 첫 번째로 비교하는 element
b : Array의 elements 중, 두 번째로 비교하는 element
sort()는 Array의 메소드로, Array 내부 elements를 정렬해주는 함수입니다. sort()는 원본 배열에도 영향을 줍니다.
Number에서 sort()
const movements = [200, 450, -400, 3000, -650, -130, 70, 1300];
console.log(movements.sort());
// [-130, - 400, -650, -1300, 200, 3000, 450, 70] <-우리가 기대하는 방식으로 정렬되어 있지 않다.
JS의 sort() 함수에 아무 인수(비교함수)가 주어지지 않을 경우, 디폴트 상태로 실행이 됩니다.
디폴트 상태는 '모든 Array elements를 String으로 변환한 다음, 정렬을 수행'합니다. 그러다보니 위의 실행결과물처럼 Number에서 정렬이 뒤죽박죽이 됩니다.
이에 대한 해결방법은, sort()를 디폴트 상태로 두는 것이 아니라 비교 함수를 전달해주는 것입니다.
sort()의 인수 - 비교 함수
비교함수의 인수로 a와 b가 넘겨집니다.
비교함수의 return 값이
1. 양수일 경우 - A 다음에 B가 오도록 정렬됩니다.
2. 음수일 경우 - B 다음에 A가 오도록 정렬됩니다.
3. 0일 경우 - A와 B의 원래 순서가 유지됩니다.
Number의 오름차순
movements.sort((a, b) => {
if (a > b)
return 1;
if (b > a)
return -1;
});
// 위의 표현식을 수학으로 표현
movements.sort((a, b) => a - b);
Number의 내림차순
movements.sort((a, b) => {
if (a > b)
return -1;
if (b > a)
return 1;
});
// 위의 표현식을 수학으로 표현
movements.sort((a, b) => b - a);
+ sort()를 String과 Number가 혼합된 Array에서는 사용할 수 없습니다.
반응형
'JS > JavaScript 강의' 카테고리의 다른 글
[JS] 56. Math object (0) | 2022.12.28 |
---|---|
[JS] 55. Number 타입의 부가적인 내용 (conversion, parsing, checking) (0) | 2022.12.22 |
53. includes/some/every (0) | 2022.12.20 |
52. reduce Method (0) | 2022.12.16 |
51. filter Method (0) | 2022.12.15 |