Sort() 함수
배열을 오름차순으로 아니면 원하는 함수를 넣어서 요구에 맞게 정렬을 할 수 있는 함수이다.
알고리즘을 풀면서 조금 여럿 알아낸 것이 있어서 기록하려고 한다!
sort() 함수는 기본적으로 문자열을 정렬하는 함수
let strs = ["a", "y", "t"];
strs.sort(); // [ 'a', 't', 'y' ]
문자열을 정렬하는 함수 이기 때문에 다양한 상황이 발생하는데,
제일 많이 발생하는 건 역시 숫자로 된 배열을 정렬할 때 이다.
let numbers = [5, 20, -10];
numbers.sort() // [ -10, 20, 5 ]
// !! 정렬이 안됨
왜 이런 현상이 발생할까? 알아보니 sort() 함수는 아까부터 강조 했듯이 문자열을 정렬하는 함수이다.
그렇기 때문에 숫자 배열을 정렬할 때도 비교를 할 때, 문자열로 변환 후 정렬을 한다.!
심지어 20이라면 문자열로 "20"인데 제일 앞에있는 "2"를 기준으로 -10이면 "-"를 기준으로 비교한다는 것이다.
그래서 저 예시를 볼 때, sort() 함수는 "5", "2", "-"의 문자열을 비교한 것이고, 유니코드를 기준으로 비교를 하기 때문에
let numbers = [5, 20, -10];
console.log(numbers[0].toString().charCodeAt(0)) // "5" : 53
console.log(numbers[1].toString().charCodeAt(0)) // "2" : 50
console.log(numbers[2].toString().charCodeAt(0)) // "-" : 45
numbers.sort() // [ -10, 20, 5 ]
이러한 결과를 얻는다는 것을 볼 수 있다.
그래서 sort() 함수를 숫자 배열에서 원하는 대로 오름차순, 내림차순으로 배열 하기 위해 sort에 인자로 함수를 넣어 구현하면 된다.
// 오름 차순 정렬
let numbers = [5, 20, -10];
numbers.sort((a, b) => a - b)
console.log(numbers) // [ -10, 5, 20 ]
// 내림 차순 정렬
numbers.sort((a, b) => b - a)
// 이렇게도 쓸 수 있다.
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers) // [ 20, 5, -10 ]
배열 중 두 요소를 인자로 넣어 양수이면 a - b 기준으로
양수이면 b 가 a 보다 앞으로
음수이면 a 가 b 보다 앞으로
같으면 변동 없이 정렬이 진행된다.
간단한 상식?인 것 같지만 그래도 이렇게 분석하고 기록하면 잊어버리지 않고 오래 갈 것이다!
'개발 > JavaScript' 카테고리의 다른 글
| [JavaScript] - Event Bubbling & Capturing (0) | 2024.12.16 |
|---|---|
| [JavaScript] - for, while 반복문 (0) | 2024.12.07 |
| [JavaScript] - 전개 구문 (2) | 2024.11.20 |
| [JavaScript] - 연산자 ==, === (1) | 2024.11.08 |
| [JavaScript] - 입력 받기 (fs, readline) (1) | 2024.11.08 |