.sort();

이준교·2023년 4월 10일
0

2023.04.10

javascript에서는 오름차순 내림차순 정렬을 위해 .sort(); 함수 사용 시(일반적인 순서가 아닌)
요소를 문자열로 변환하고 유니 코드 코드 포인트 순서로 문자열을 비교하여 정렬
그렇기에 .sort(); 에 compareFunction(정렬 순서를 정의하는 함수) 을 사용하여 정렬

문자열

compareFunction(a, b)이 0보다 작은 경우 a를 b보다 낮은 색인으로 정렬, 즉 a가 먼저
compareFunction(a, b)이 0을 반환하면 a와 b를 서로에 대해 변경하지 않고 모든 다른 요소에 대해 정렬
// 참고 : ECMAscript 표준은 이러한 동작을 보장하지 않으므로 모든 브라우저가 이를 적용하지는 않을 수 있음
compareFunction(a, b)이 0보다 큰 경우, b를 a보다 낮은 인덱스로 정렬
compareFunction(a, b)은 요소 a와 b의 특정 쌍이 두 개의 인수로 주어질 때 항상 동일한 값을 반환, 일치하지 않는 결과가 반환되면 정렬 순서는 정의되지 않는다.

function compare(a, b) {
  if (a is less than b by some ordering criterion) {
    return -1;
  }
  if (a is greater than b by the ordering criterion) {
    return 1;
  }
  // a must be equal to b
  return 0;
}
=> 만약 내림차순으로 정렬을 원한다면 return값 -1 과 1을 서로 바꿔서 사용

숫자

function compareNumbers(a, b) {
return a - b;
}
=> 마찬가지로 a-b 를 b-a로 사용 시 내림차순

// 예시
var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
  return a - b;
});
console.log(numbers);
// [1, 2, 3, 4, 5]

numbers.sort(function(a, b) {
  return b - a;
});
console.log(numbers);
// [5, 4, 3, 2, 1]

비 ASCII 문자 정렬

ASCII 이외의 문자, 즉 악센트 부호가있는 문자 (e, é, è, a, ä 등)가있는 문자열을 정렬하려면 영어가 아닌 다른 언어의 문자열에 String.localeCompare를 사용

//예시
var items = ['réservé', 'premier', 'cliché', 'communiqué', 'café', 'adieu'];
items.sort(function (a, b) {
  return a.localeCompare(b);
});

// items is ['adieu', 'café', 'cliché', 'communiqué', 'premier', 'réservé']
profile
어떻게든 해내는 개발자, 이준교입니다

0개의 댓글