728x90
sort 함수란?
sort( ) 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다. 정렬은 stable sort 가 아닐 수 있습니다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따릅니다.
참조 : mdn
sort( ) 메서드의 특징
- 기본적으로 오름차순으로 정렬합니다.
- 배열 요소를 문자열로 캐스팅하고 변환된 문자열을 비교하여 순서를 결정합니다.
- 배열의 요소가 undefined인 경우에는 문자열로 변환되지 않습니다.
- 배열의 요소가 undefined인 경우에는 배열의 맨 끝으로 정렬됩니다.
1) 구문
array.sort(sortFunction)
sortFunction은 요소 순서를 결정하는 데 사용되는 함수의 이름입니다. 생략하면 오름차순, ASCII 문자 순서로 정렬됩니다.
sortFunction 인수에 함수를 지정하면 아래의 값 중 하나가 변환됩니다.
- 첫 번째 인수가 두 번째 인수보다 작을 경우 - 값
- 두 인수가 같을 경우 0
- 첫 번째 인수가 두 번째 인수보다 클 경우 + 값
2) 오름차순
1. 문자 정렬
let fruit = ['apple', 'orange', 'banana']
fruit.sort();
>>> ['apple', 'banana', 'orange']
sortFunction 생략하면 기본으로 오름차순이 되지만 ASCII 문자 순서로 정렬되기 때문에 예상하지 못한 에러가 발생할 수 있습니다.
2. 숫자 정렬
let arr = [1, 5, 3, 10, 30]
arr.sort()
>>> [1, 10, 3, 30, 5]
위와 같이 ASCII 문자 순서로 정렬되어 숫자의 크기대로 나오지가 않습니다. 이러한 경우에 오름차순으로 하기 위해서는 함수를 조금 변경해 주면 됩니다.
let arr = [1, 5, 3, 10, 30]
arr.sort(function(a, b){
return a - b;
});
>>>[1, 3, 5, 10, 30]
3. object 정렬
let student = [
{ name : '철수', age : 15 },
{ name : '영희', age : 17 },
{ name : '영민', age : 23 },
{ name : '나리', age : 16 }
]
//이름순으로 정렬
student.sort(function(a, b){
return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
});
>>> [{ name : '나리', age : 16 },
{ name : '영민', age : 23 },
{ name : '영희', age : 17 },
{ name : '철수', age : 15 }]
//나이순으로 정렬
let sortAge = 'age';
student.sort(function(a, b){
return a[sortAge] - b[sortAge];
});
>>> [{ name : '철수', age : 15 },
{ name : '나리', age : 16 },
{ name : '영희', age : 17 },
{ name : '영민', age : 23 }]
3) 내림차순
1. 숫자 정렬
오름차순으로 정렬하는 함수가 .sort(function(a, b) { return a - b; })라면 내림차순으로 정렬하는 함수는 .sort(function(a, b) {return b - a; })입니다.
2. 문자 정렬
문자열을 a - b 또는 b -a 와 같이 - 연산자를 사용하여 숫자 정렬처럼 사용할 경우 에러가 발생하므로 비교 연산자를 사용해야 합니다.
//문자열 내림차순
let arr = ['BA', 'BB', 'AB', 'AA'];
arr.sort(function compare(a, b) {
if (a > b) return -1;
if (a < b) retunr 1;
return 0;
});
>>> ['BB', 'BA', 'AB', 'AA']
//삼항연산자 사용
let arr = ['BA', 'BB', 'AB', 'AA'];
arr.sort(function compare(a, b){
return a == b ? 0 : a > b ? -1 : 1;
});
728x90
'Language > JavaScript' 카테고리의 다른 글
[TIL] JavaScript - innerHTML된 파일에서 함수 구현하기...? (1) | 2022.11.21 |
---|---|
[TIL] JavaScript - push( ), pop( ), unshift( ), shift( ) (0) | 2022.11.15 |
[TIL] JavaScript - map( ), filter( ), reduce( ) (0) | 2022.11.11 |
[TIL] JavaScript 전개 연산자 (0) | 2022.11.10 |
[TIL] JavaScript Math 함수 정리하기!! (0) | 2022.11.09 |
댓글