[JavaScript] 배열 정렬 sort() 메서드

itisny·2023년 9월 13일
0
post-custom-banner

sort() 메서드는 배열의 요소를 정렬한 후 그 배열을 반환합니다.
기본적으로 문자열의 유니코드 코드포인트를 기준으로 정렬합니다.

  • 유니코드 :
    • 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준
    • 현재의 유니코드는 지구상에서 통용되는 대부분의 문자들을 담고 있다
  • 코드포인트 : 문자에 부여한 고유한 숫자값

구문

arr.sort([compareFunction]);

매개변수

compareFunction (선택)
정렬 순서를 정의하는 함수. 생략하면 배열은 각 요소의 문자열 변환에 따라 각 문자의 유니 코드 코드 포인트 값에 따라 정렬됩니다.

반환값

정렬한 배열이 반환됩니다. 새로운 배열이 만들어지는 것이 아닙니다!!

설명

compareFunction이 제공되지 않으면 요소를 문자열로 변환하고 유니코드 코드포인트 순서로 문자열을 비교하여 정렬됩니다.
예를 들어 "나무"는 '도끼" 앞에 옵니다. 숫자 정렬에서는 3이 10보다 앞에 오지만 숫자는 문자열로 변환되기 때문에 '10'은 유니코드 순서에서 '3'앞에 옵니다.

compareFunction이 제공되면 배열 요소는 compareFunction의 반환 값에 따라 정렬됩니다. a와 b가 비교되는 두 요소라면,

  • compareFunction(a,b)0보다 작은 경우, a를 b보다 낮은 값으로 봅니다.(a를 낮은 인덱스로 정렬합니다.) 즉, a가 앞으로 먼저 옵니다.
  • compareFunction(a,b)이 0인 경우, a와 b는 그대로 둡니다. (참고: 모든 브라우저가 이를 존중하지 않습니다.)
  • compareFunction(a,b)0보다 큰 경우, b를 a보다 낮은 값으로 봅니다.(b를 낮은 인덱스로 정렬합니다.) 즉, b가 앞으로 먼저 옵니다.
function compare(a,b){
  if(a가 b보다 작을때) {
    return -1;
  }
  
  if(a가 b보다 클때) {
    return 1;
  }
  
  // a와 b가 같을때
  return 0;
}  

compare 함수는 문자열 대신 숫자를 비교하기 위해 a에서 b를 뺄 수 있습니다.

// 오름차순으로 정렬 (작은수에서 큰수)
function compareNumbersAscending(a, b) {
  return a - b;
}

// 내름차순으로 정렬 (큰수에서 작은수)
function compareNumbersDescending(a, b) {
  return b - a;
}

var numbers = [4, 2, 5, 1, 3];

numbers.sort(compareNumbersAscending);
console.log(numbers);

numbers.sort(compareNumbersDescending);
console.log(numbers);

출처 : MDN - Array.prototype.sort()

post-custom-banner

0개의 댓글