sort() 함수
•
배열을 정렬하기 위해 사용
Array.prototype.sort()
•
sort() 함수는 배열의 요소를 적절한 위치에 정렬한 후, 그 배열을 반환한다
arr.sort([compareFunction])
// compareFunction
// 정렬 순서를 정의하는 함수
// 이 값이 생략되면, 배열의 element들은 문자열로 취급되어, 유니코드 값 순서대로 정렬된다
// 이 함수가 a, b 두개의 element를 파라미터로 입력받을 경우,
// 이 함수가 리턴하는 값이 0보다 작을 경우, a가 b보다 앞에 오도록 정렬하고,
// 이 함수가 리턴하는 값이 0보다 클 경우, b가 a보다 앞에 오도록 정렬한다
// 만약 0을 리턴하면, a와 b의 순서를 변경하지 않는다
JavaScript
복사
리턴값
compareFunction 규칙에 따라서 정렬된 배열을 리턴
•
이때, 원본 배열인 arr가 정렬이 되고, 리턴하는 값 또한 원본 배열인 arr을 가리키고 있음에 유의
예시
const arr1 = [2, 1, 3];
const arr2 = ['banana', 'apple', 'orange']
arr1.sort();
document.writeln(arr1 + '<br>'); // [1, 2, 3]
arr2.sort();
document.writeln(arr2 + '<br>'); // ['apple', 'banana', 'orange']
JavaScript
복사
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.writeln(arr + '<br>'); // [1, 2, 3, 10]
JavaScript
복사
•
배열의 숫자들을 유니코드 순서가 아닌, 숫자 크기 순서대로 정렬하기 위해서
•
sort() 함수의 파라미터 함수를 정의하였다
•
이 함수는 a, b 두개의 파라미터를 입력받고,
•
a > b 이면 1
•
a == b 이면 0
•
a < b 이면 -1 을 리턴
•
주어진 배열을 오름차순 정렬
const arr = [2, 1, 3, 10];
arr.sort(function(a, b) {
return a - b;
});
document.writeln(arr + '<br>'); // [1, 2, 3, 10]
JavaScript
복사
•
두 숫자의 차가 양수값이냐, 음수값이냐를 이용하여
•
숫자를 오름차순으로 정렬하는 예제를 위와같이 단순화 할 수도 있다
sort() 함수로 숫자 오름차순 정렬
const arr = [2, 1, 3, 10];
arr.sort(function(a, b) {
return a - b;
});
document.writeln(arr + '<br>'); // [1, 2, 3, 10]
JavaScript
복사
sort() 함수로 숫자 내림차순 정렬
const arr = [2, 1, 3, 10];
arr.sort(function(a, b) {
return b - a;
});
document.writeln(arr + '<br>'); // [10, 3, 2, 1]
JavaScript
복사
sort() 함수로 문자열 정렬
오름차순
const arr = ['banana', 'b', 'boy'];
arr.sort();
document.writeln(arr + '<br>'); // ['b', 'banana', 'boy']
JavaScript
복사
내림차순
const arr = ['banana', 'b', 'boy'];
arr.sort(function(a, b) {
if(a < b) return 1;
if(a > b) return -1;
if(a === b) return 0;
});
document.writeln(arr + '<br>'); // ['boy', 'banana', 'b']
JavaScript
복사
sort() 함수로 객체 정렬
const arr = [
{name: 'banana', price: 3000},
{name: 'apple', price: 1000},
{name: 'orange', price: 500}
];
arr.sort(function(a, b) {
return a.price - b.price;
});
document.writeln(JSON.stringify(arr[0]) + '<br>');
document.writeln(JSON.stringify(arr[1]) + '<br>');
document.writeln(JSON.stringify(arr[2]) + '<br>');
// {"name":"orange","price":500}
// {"name":"apple","price":1000}
// {"name":"banana","price":3000}
JavaScript
복사
→ 원본을 바꿔버리는 sort() 함수
→ 원본을 바꾸고 싶지 않다면? slice()를 중간에 끼워준다 → 그러면 원본을 복사해서 정렬하기 떄문에 원본이 지워지지 않는다
const arr = [2, 1, 3, 10, 5, 9, 4, 8, 6];
array.slice().sort((a, b) => a - b); // 오름차순
array.slice().sort((a, b) => b - a); // 내림차순
JavaScript
복사
→ 문자열을 정렬하고 싶으면
arr = ['apple', 'orange', 'grape', 'banana', 'kiwi']
arr.slice().sort((a, b) => a[0].charCodeAt() - b[0].charCodeAt())
// ['apple', 'banana', 'grape', 'kiwi', 'orange']
arr.slice().sort((a, b) => b[0].charCodeAt() - a[0].charCodeAt())
// ['orange', 'kiwi', 'grape', 'banana', 'apple']
JavaScript
복사
→ 완벽하게 사전순으로 정리하고 싶다면?
arr.slice().sort((a, b) => a.localeCompare(b))
// ['apple', 'banana', 'grape', 'kiwi', 'orange']
arr.slice().sort((a, b) => b.localeCompare(a))
// ['orange', 'kiwi', 'grape', 'banana', 'apple']
// 한글로도 적용이 가능
JavaScript
복사