/* 기본 정렬: 문자열 배열을 유니코드 코드 포인트 순서로 정렬하는 예제 */
const enStrings = ["d", "b", "c", "a"];

enStrings.sort();
console.log(enStrings); // ["a", "b", "c", "d"]

/* 콜백 함수를 사용해 숫자의 크기 기준으로 오름차순 정렬하는 예제 */
const sortedNumbers = [1, 4, 10, 31, 1000];

sortedNumbers.sort((a, b) => a - b);
console.log(sortedNumbers); // [1, 4, 10, 31, 1000]
arr.sort();
arr.sort(compareFunction);
/* 알파벳 배열 정렬 예제 */
const enStrings = ["d", "b", "c", "a"];

enStrings.sort();
console.log(enStrings); // ["a", "b", "c", "d"]

/* 한글 배열 정렬 예제 */
const koStrings = ["다", "가", "나"];

koStrings.sort();
console.log(koStrings); // ["가", "나", "다"]
arr.sort();
arr.sort(compareFn); // compareFunction (옵션): 매개변수에 콜백 함수를 전달하여 정렬 기준을 지정
/**
 * 콜백 함수
 *
 * @param a 비교할 첫 번째 요소입니다.undefined가 될 수 없습니다.
 * @param b 비교를 위한 두 번째 요소입니다. undefined가 될 수 없습니다.
 *
 * 콜백 함수는 기명 함수(사용자 정의 함수)나 익명 함수 등으로 사용할 수 있습니다.
 * (당연히) 모든 콜백 함수는 화살표 함수로 사용할 수 있습니다.
 */
compareFunction(a, b) {
    // a와 b를 비교할 로직: 비교 결과를 반환해야 합니다.
}
const numbers = [1, 1000, 10, 31];

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

numbers.sort(compareNumbers);

console.log(numbers); // 출력: [1, 10, 31, 1000]
const sparseArr = [3, , 1, undefined, 2];
sparseArr.sort();
console.log(sparseArr); 
// 출력 예: [1, 2, 3, undefined, <1 empty slot>]
// undefined 값이나 값이 없는 요소(희소 배열)는 정렬 결과에서 배열의 끝에 위치합니다.
const arr = [3, , 1, undefined, 2];

function hasValue(value) {
    // undefined 값인 요소는 제거합니다.
    return value !== undefined;
}

/*
 * filter()는 다음과 같이 동작합니다.
 *
 * 1. 희소 배열의 빈 슬롯은 콜백 함수가 호출되지 않으므로 자동으로 제외됩니다.
 * 2. undefined 값을 가진 요소는 콜백 함수의 반환 값이 false이므로 제외됩니다.
 */
const filteredArr = arr.filter(hasValue);

filteredArr.sort();

console.log(filteredArr); // [1, 2, 3]
const enStrings = ["A", "C", "B"];
enStrings.sort();
console.log(enStrings); // ["A", "B", "C"] 
const enStrings = ["A", "a", "B"];
enStrings.sort();
console.log(enStrings); // ["A", "B", "a"] -> 소문자 "a"가 대문자 "B"보다 뒤에 정렬되어 있습니다.
/* 숫자 배열을 정렬하는 예시:
   요소의 숫자를 문자열로 취급하여 문자열의 해당 유니코드 코드 포인트 순서로 정렬 */
const numbers = [1, 1000, 4, 10, 31];
numbers.sort();

console.log(numbers); // 출력: [1, 10, 1000, 31, 4] <= 주의!! 문자열처럼 취급하여 정렬함
const numbers = [1, 1000, 4, 10, 31];

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

numbers.sort(compareNumbers);

console.log(numbers); // 출력: [1, 4, 10, 31, 1000]