본문 바로가기

프로그래밍/javascript

[javascript] sort함수

sort 함수는 배열 내부의 값을 손쉽게 정렬 할 수 있다.

const arr = [5,4,3,2,1]
arr.sort()
console.log(arr) //[ 1, 2, 3, 4, 5 ]

그런데, 아래의 코드를 보면 의도한 것과 다르게 정렬이 된 것을 볼 수 있다.

const arr = [15,14,13,2,1,3,4,5,6]
arr.sort()
console.log(arr) //[ 1, 13, 14, 15, 2, 3, 4, 5, 6 ]

원인은 javascript 의 sort함수는 배열 안의 값을 유니코드에 기반해서 정렬하기 때문이다.

즉, 11 < 5로 비교가 된다. 1은 유니코드에서 49, 5는 53이기 때문에

유니코드 표

해결 방법은 comapre function을 활용 하는 것 이다. 

const arr = [ 15, 14, 13, 2, 1, 3, 4, 5, 6 ]
arr.sort(( next, prev )=>{
	if( next > prev ){
		return 1
      } else if ( next < prev ){
      	return -1
      	}

})
console.log(arr)  //[ 1, 2, 3, 4, 5, 6, 13, 14, 15 ]

compare function이란 sort 함수 안에서 원하는 형태로 정렬 할 수있도록 하는 함수인데, 이 함수는 2개의 parameter를 가지고, 1번쨰는 비교 대상값 중 뒤에 있는 값, 2번째가 비교 대상 값 중 앞에 있는 값 이다.

반환값이 0보다 큼 -> 오름차순 정렬

반환값이 0 -> 변화 x

반환값이 0보다 작음 -> 내림차순 정렬이 된다.