본문 바로가기
javaScript/JS Tutorial

[javaScript]비교함수 숫자정렬 오름차순, 내림차순

by mooyou 2022. 11. 6.
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

댓글