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 |
댓글