본문 바로가기
JS

JS, sort()와 localeCompare()

by Hyeon_E 2023. 2. 4.

sort( )

sort의 기본 정렬 순서는 문자열의 유니코드 포인트를 따름

compareFunction이 제공되지 않으면 요소를 문자열로 변환하고 유니코드 포인트 순서로 문자열을 비교하여 정렬

기본적으로 아무것도 적지않으면 오름차순을 정렬(한글, 영어, 숫자 등)

  • compareFunction이 (a, b) < 0 인 경우
    • a , b 순으로 정렬
    • 숫자인 경우: sort((a,b) => a-b)
    • 문자인 경우: sort((a-b)) =>a<b?-1:1)
  • compareFunction이 (a, b) > 0 인 경우
    • b , a 순으로 정렬
    • 숫자인 경우: sort((a,b) => b-a)
    • 문자인 경우: sort((a-b)) =>a<b?1:-1)
  • compareFunction이 0을 반환하면
    • a, b를 변경x
    • sort((a,b) => a=b)
let num = [5, 3, 8, 1, 6];
num.sort();
console.log(num);	//1, 3, 5, 6, 8

 

문제는 1,5,10이 있을 때 10이라는 숫자를 10으로 인식하지 못함

즉 sort함수를 사용하면 자열로 변환되어 숫자의 크기와는 상관없이 첫자리 숫자순으로 오름차순 정렬이 됨

 

let num = [10, 200, 3, 8, 1, 6];
num.sort();
console.log(num);	//1, 10, 200, 3, 6, 8

 

그래서 정상적인 숫자의 오름차순을 위해선 비교함수(compareFunction)를 이용

 

문자열끼리는 >, < 연산은 가능하지만 -연산은 불가능하기때문에 제대로 된 비교가 이루어지지 않아 >,<,===을 이용

 

let s = ["c", "e", "a", "b", "d"];
s.sort((a,b)=>a<b?-1:1)		// ['a', 'b', 'c', 'd', 'e']
num.sort((a,b)=>a<b?1:-1)	// ['e', 'd', 'c', 'b', 'a']

 

소문자와 대문자 비교에서는 오름차순의 경우 대문자가 앞

 

 

let s = ["c", "e", "A", "b", "d","B","e"];
s.sort((a,b)=>a<b?-1:1)	// ['A', 'B', 'b', 'c', 'd', 'e', 'e']
s.sort((a,b)=>a<b?1:-1)	// ['e', 'e', 'd', 'c', 'b', 'B', 'A']

 

localeCompare( )

문자열과 문자열을 비교하여 정렬순서에 따른 비교를 할 수 있음

인자로 string 타입에 비교대상을 받음

 

비교 결과에 따라

  • 비교대상이 사전적으로 앞에 있음: -1(음수값)
  • 비교대상이 사전적으로 뒤에 있음: 1(양수값)
  • 비교대상이 사전적으로 같은 위치에 있음: 0

 

'a'.localeCompare('b')	// -1
'b'.localeCompare('a')	// 1
'a'.localeCompare('a')	// 0

 

'JS' 카테고리의 다른 글

JS, 문자 혹은 문자열 찾기  (0) 2023.05.27
JS, 문자열을 배열로&배열을 문자열로  (1) 2023.05.27
JS, Math.  (0) 2023.05.26
JS, .find() .filter()  (0) 2023.02.22
JS, array 추가와 삭제  (0) 2023.02.14

댓글