Array.prototype.sort()

Shin Yeongjae·2020년 7월 6일
0

Wecode

목록 보기
12/26

Array.prototype.sort()는 Array에 대한 메서드로, 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환한다.

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

const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort(); // ['Dec', 'Feb', 'Jan', 'March']
const array = [1, 30, 4, 21, 100000];
array.sort(); // [1, 100000, 21, 30, 4]

우리가 기본적으로 생각할때는 당연히 [1, 4, 21, 30, 100000]의 순서로 정렬이 되어야 한다고 생각하겠지만, 정렬 순서를 정해주지 않았기 때문에 유니 코드 순서에 따라 앞자리가 1인 경우에 유니코드가 더 빠르기 때문에 100000이 먼저 정렬된다.

정렬은 어떻게 정해주느냐에 따라 다른데, 만약 a와 b가 비교되는 두 요소라면

  • compareFunction(a, b)가 0보다 작은 경우 a를 b보다 낮은 인덱스로 정렬한다. 즉, a가 먼저온다.
  • compareFunction(a, b)가 0을 반환하면 a와 b를 서로에 대해 변경하지 않고 모든 다른 요소에 대해 정렬한다.
  • compareFunction(a, b)가 0보다 큰 경우, b를 a보다 낮은 인덱스로 정렬한다.
  • compareFunction(a, b)는 a와 b의 특정 쌍이 두 개의 인수로 주어질 때 항상 동일한 값을 반환한다. 일치하지 않는 결과가 반환되면 정렬 순서는 정의되지 않는다.

문자열 대신 숫자를 비교하기 위해 compareFunction에서 a에서 b를 뺄 수 있다. 다음은 배열을 오름차순으로 정렬하는 경우이다.(Infinity와 NaN이 포함되어 있지 않은 경우)

function compareFunction(a, b) {
  return a - b;
}

다음은 숫자를 내림차순으로 정렬하는 경우이다.

function compareFunction(a, b) {
  return b - a;
}

배열만 정렬하는게 아니라 객체도 마찬가지로 정렬할 수 있다.(해당 속성 중 하나의 값을 기준으로)

const student = [
  { name: '재석', age: 21 }.
  { name: '광희', age: 25 },
  { name: '형돈', age: 13 },
  { name: '명수', age: 44 }
];

student.sort(function(a, b) {
  return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
});
// 광희, 명수, 재석, 형돈

profile
문과생의 개발자 도전기

0개의 댓글