요즘 코딩 테스트 준비로 알고리즘을 문제를 풀고 있습니다.
문제를 풀면서 사용한 메서드들을 제대로 이해하지 않고 문제를 풀고 있다고 느껴져 제대로 이해하고 사용하기 위해 이 글을 작성 하였습니다.
sort란?
arr.sort([compareFunction])
대괄호([])는 괄호() 안의 매개변수가 필수가 아니라 상황에 따라 생략이 가능하다는 말입니다.
compareFunction은 요소의 순서를 결정하는 데 사용되는 함수로
첫번째 값이 두번째 값보다 작을경우 음수값 반환
같을경우는 0 반환,
그렇지 않을 경우는 양수 값을 반환됩니다.
생략할 경우 ASC||문자 기준으로 오름차순으로 정렬됩니다.
파라미터가 생략되어 ASC||문자 기준으로 정렬되면 10이 3보다 앞에있는 것을 알 수 있습니다.
그 이유는 ASC||문자 기준으로 정렬할 때 일시적으로 숫자타입 -> 문자열 타입으로 형변환하기 때문입니다.
그리고 형 변환 이후에는 해당문자의 첫번째 문자를 기준으로 비교하기 때문에 "10" =1의 아스키 코드 값을가져 "3"보다 작은 아스키 코드 값을 가질 수 있게 된다.
그럼 제대로 정렬하게 하려면 어떻게 해야될까 ?
.sort() 안에 compareFunction파라미터를 선언해주면 됩니다.
.sort() 함수는 compareFunction에 선언된 함수에게 배열의 요소 2개씩 반복해서 보낸 뒤, compareFunction이 반환하는 값을 기준으로 정렬합니다.
ex) 요소들의 이름을 a,b라고 한다면 compareFunction의 반환값(return)에 따른 .sort() 함수의 해석은
실제로 사용할 때는
오름 차순 코드
내림 차순 코드
Object 정렬
조건부 정렬
마무리
참고사이트:
https://change-words.tistory.com/64
https://brunch.co.kr/@swimjiy/12
https://opentutorials.org/course/50/109 (sort함수 동작원리 댓글에 있습니다)