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 이외의 문자, 즉 악센트 부호가있는 문자 (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é']