minTech

[Javascript] Array.Sort() 본문

JavaScript

[Javascript] Array.Sort()

pushzzeong 2023. 10. 17. 10:53

array는 각각의 요소에 순서가 정해져 있는 객체이다. 이 순서를 내가 원하는 대로 정리할 때 사용하는 함수가 바로 sort() 함수이다. 

arr1.sort([compareFunction)

* sort() 함수의 경우 복사본이 따로 만들어지는 것이 아닌 원배열 그 자체가 정렬되는 것이기 때문에 주의한다. 

 

  • compareFunction

   - 정렬 순서를 정의하는 함수이다.

   - 함수의 리턴 값에 따라 오름차순/내림차순 이 결정된다.

     1) return 값 < 0  : a가 b보다 앞에 오도록 정렬한다. 

     2) return 값 > 0  : b가 a보다 앞에 오도록 정렬한다. 

   - default 는 오름차순 정렬이기 때문에 만약 compareFunction 부분을 생각할 경우에는 오름차순 정렬을 한다. 

 

 

  • 유니코드 순서로 정렬을 실행한다. 

 sort() 함수의 경우 유니코드 순서로 배열을 정렬하기 때문에 몇 가지 내가 예상치 못한 결과가 생길 수 있다. 

 

1) 만약 숫자를 sort() 함수로 정렬해보자

let arr = [1,2,5,10,56]
arr.sort()

console.log(arr)

<실행결과>

[1,10,2,5,56]

만약에 '5' 라는 숫자와 '10' 이라는 숫자가 들어간 array에 sort() 함수를 실행하면 '5' 가 더 크다고 판단되어 10보다 더 뒤의 순서로 배치된다 => 따라서 숫자의 내림/오름 차순으로 정렬할 때는 compareFunction 함수에 정렬 순서를 정의해준다.

 

[오름차순의 경우] 

arr.sort((a,b) => a-b)

[내림차순의 경우]

arr.sort((a,b) => b-a)

 

2) 대문자와 소문자를 같이 넣어 정렬을 실행해보자.

let arr = ['A','B','b','O','a']
arr.sort()

console.log(arr)

<실행결과>

["A","B","O","a","b"]

위 결과도 sort() 함수는 유니코드 순서로 정렬하기 때문에 대문자와 소문자가 병행된 배열을 정리할 경우 대문자가 소문자보다 앞에 위치하는 것을 알 수 있다. => 따라서 배열에 있는 요소를 모두 대문자가 소문자로 통일한 후, 정렬을 실행한다. 

이때, 숫자 정렬처럼 리턴 값이 a-b 혹은 b-a 가 되면 안된다. 반드시 -1/0/1 을 return 하도록 한다.

 

 

  • localCompare() 

 이는 기존 문자열을 비교하여 비교 문자열에서의 순서가 전인지, 후인지, 동일한 위치에 있는지 알려주는 숫자를 리턴한다. 이 함수는 한글에 사용하면 유용하다.