배열을 정리하기 위해서 sort()함수를 사용
arr.sort([compareFunction])
: 정렬 순서를 정의하는 함수로 배열 요소는 compare 함수의 반환 값에 따라 정렬
: 만약 이 값이 생략되면, 문자열의 유니코드 순서대로 정렬된다.
MDN Array.prototype.sort() 부문 참고
이 함수가 a, b 두개의 element를 입력받아 이 함수가 리턴하는 값에 따라 정렬됨
function compare(a, b) {
if(a < b) return -1; // a b 순으로 정렬
if(a > b) return 1; // b a 순으러 정렬
if(a == b) return 0; // 변동 없음
}
[예제1] sort() 함수를 사용하여 오름차순으로 정렬한 예제
const arr1 = [2, 1, 3];
const arr2 = ['banana', 'apple', 'tomato']
arr1.sort();
document.write(arr1); // [1, 2, 3]
arr2.sort();
document.write(arr2); // ['apple', 'banana', 'tomato']
[예제2] sort() 함수를 사용하여 숫자 오름차순으로 정렬
compareFunction을 사용하지 않아, 유니코드 방식으로 정렬이 됨.
단, 원하는 방향성이 아님
const arr = [2, 1, 3, 10];
arr.sort();
document.write(arr); // 결과 : 1, 10, 2 ,3 순서
[예제3] sort() 함수를 사용하여 숫자 오름차순 정렬
예제2에서 compareFunction을 사용한 경우
const arr = [2, 1, 3, 10];
arr.sort(function(a, b) {
if(a > b) return 1;
if(a === b) return 0;
if(a < b) return -1;
});
document.write(arr); // 결과 : 1, 2, 3, 10 순서
arr.sort(function(a, b) {
return a-b; // 내림차순은 b-a;로 하면 됨
}); // 두 숫자 차이로 단순화 할 수도 있음
: 문자열의 경우 파라미터가 입력되지 않으면 자동으로 유니코드 순으로 정렬해주기 때문에 오름차순은 따로 파라미터를 입력하지 않아도 됨.
[예제4] sort() 함수를 사용하여 문자 오름차순 정렬
const arr = ['apple', 'a', 'ade'];
arr.sort();
document.write(arr);
[예제5-1] sort() 함수를 사용하여 문자 내림차순 정렬
const arr = ['apple', 'a', 'ade'];
arr.sort(function(a, b) {
if(a < b) return 1;
if(a > b) return -1;
if(a === b) return 0;
});
document.write(arr);
[예제5-2] sort() 함수를 사용하여 문자 내림차순 정렬
const arr = ['apple', 'a', 'ade'];
arr.sort().reverse(); // 오름차순 배열한 걸 reverse 한 것
document.write(arr);
: 유니코드로 sort하면 대분자가 소문자보다 앞에 오도록 정렬이 됨
[예제6] sort() 함수를 사용하여 대소문자 구분 없이 문자 오름차순 정렬
const arr = ['apple', 'A', 'ade'];
arr.sort(function(a, b) {
const upperCaseA = a.toUpperCase();
const upperCaseB = b.toUpperCase();
if(upperCaseA > upperCaseB) return 1;
if(upperCaseA < upperCaseB) return -1;
if(upperCaseA === upperCaseB) return 0;
});
document.write(arr);
MDN String.prototype.toUpperCase() 문서
: 객체의 특정 값을 기준으로 정렬하는 방법
[예제7] sort() 함수를 객체 정렬하기
: 배열의 element가 객체일 때, 객체의 나이 순으로 오름차순 정렬
const arr = [
{name: 'kate', age: 27},
{name: 'mike', age: 33},
{name: 'venus', age: 21}
];
arr.sort(function(a, b) {
return a.age - b.age;
});
document.write(arr);