본문 바로가기
Language/JavaScript

[TIL] JavaScript - 정렬 함수, sort( ) !!!

by pin9___9 2022. 11. 13.
728x90

sort 함수란?

sort( ) 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다. 정렬은 stable sort 가 아닐 수 있습니다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따릅니다.

참조 : mdn

 

sort( ) 메서드의 특징

  1. 기본적으로 오름차순으로 정렬합니다.
  2. 배열 요소를 문자열로 캐스팅하고 변환된 문자열을 비교하여 순서를 결정합니다.
  3. 배열의 요소가 undefined인 경우에는 문자열로 변환되지 않습니다.
  4. 배열의 요소가 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

댓글