728x90
300x250
SMALL
기본적으로 함수는 값을 문자열 sort()로 정렬 한다.
그러나 다음과 같이 숫자로 정렬할 경우 예상과 다른 결과를 얻게 된다.
const points = [40, 100, 1, 5, 25, 10];
points.sort(); //1,10,100,25,40,5
1,5,10,25,40,100 이렇게 순차적으로 정렬이 되기 원했지만 sort()메서드로 정렬 할경우 2가 1보다 크기 때문에
25가 100보다 크다고 처리 된다.
그래서 위와 같은 결과가 나타나게 된다.
이러한 문제는 비교함수를제공해서 해결 할 수 있다.
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});//1,5,10,25,40,100
동일한 트릭을 사용하면 내림차순 정렬도 가능하다.
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a}); //100,40,25,10,5,1
비교 함수 원리
비교 함수는 인수에 따라 음수, 0 또는 양수 값을 반환해야 한다.
function(a, b){return a - b}
sort() 함수가 두 값을 비교할때 위 function함수를 거쳐서 2개의 값의 결과가 음수, 0 , 양수 인지에 따라서
음수 값이라면 a가 b 앞에 정렬되고 양수라면 b가 a 앞에 정렬된다. 0이라면 정렬에 변화가 없다.
예를들어서 40, 100을 비교 한다면 sort() 메서드가 비교 함수를 호출하고 a - b 즉 40 - 100
리턴값으로 -60이 되고 음수 이기 때문에 a인 40이 앞에 b인 100이 뒤에 위치하게 된다.
참고 : https://www.w3schools.com/js/js_array_sort.asp
728x90
반응형
LIST
'javaScript > JS Tutorial' 카테고리의 다른 글
[javaScript]배열 최소값 최대값 찾기 (0) | 2022.11.08 |
---|---|
[javaScript] 피셔 예이츠 셔플 - 무작위 순서로 배열 정렬 (1) | 2022.11.07 |
[javaScript]배열의 일부를 잘라서 새 배열 만들기 slice() (0) | 2022.11.04 |
[javaScript]배열 원하는 위치 새 항목 추가/제거 splice() (0) | 2022.11.02 |
[javaScript]배열 반전 reverse() (0) | 2022.11.01 |
댓글