Sort 21.03.23
in Dev on Java Script
sort()
- syntax sort의 파라미터 : compareFunction [선택 사항]
arr.sort([compareFunction])
compareFunction : 정렬 순서를 정의하는 함수. 생략하면 배열은 각 요소의 문자열 변환에 따라 각 문자의 유니 코드 코드 포인트 값에 따라 정렬.
기본 정렬 순서 : 문자열의 유니코드 코드 포인트
const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months);
// ["Dec", "Feb", "Jan", "March"]
const array1 = [1, 30, 4, 21, 100000];
array1.sort();
console.log(array1);
// [1, 100000, 21, 30, 4]
- 주의 : 복사본이 만들어지는 것이 아니라 원래 배열을 정렬한다.
compareFunction 제공
배열 요소는 compare 함수의 반환 값에 따라 정렬.
function compareFunc(a, b) {
// 정렬 방법
}
arr.sort(compareFunc)
[compareFunction 특징]
- 정렬 순서를 정의하는 함수.
- 생략되면, 배열의 element들은 문자열로 취급되어, 유니코드 값 순서대로 정렬됩니다.
- 이 함수는 두 개의 배열 element를 파라미터로 입력 받습니다.
- 이 함수가 a, b 두개의 element를 파라미터로 입력받을 경우,
- 이 함수가 리턴하는 값이 0보다 작을 경우, a가 b보다 앞에 오도록 정렬하고,
- 이 함수가 리턴하는 값이 0보다 클 경우, b가 a보다 앞에 오도록 정렬합니다.
- 만약 0을 리턴하면, a와 b의 순서를 변경하지 않습니다.
// 오름차순 정렬
unction compare(a, b) {
if (a < b) {
return -1;
}
if (a > b) {
return 1;
}
// a = b
return 0;
}
Number sort
- 숫자 오름차순 정렬
const arr = [2, 1, 3, 10];
arr.sort(function(a, b) {
return a - b;
});
// 1,2,3,10
- 숫자 내림차순 정렬
const arr = [2, 1, 3, 10];
arr.sort(function(a, b) {
return b - a;
});
// 10,3,2,1
String sort
- 문자 오름차순 정렬 (대소문자 구분)
const arr = ['banana', 'b', 'Boy'];
arr.sort();
// Boy, b,banana
sort() 함수로 문자열을 정렬하면, 대문자가 소문자보다 앞에 오도록 정렬된다. (유니코드가 대문자가 소문자보다 앞서기 때문)
- 문자 내림차순 정렬 (대소문자 구분)
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;
});
// boy,banana,b
- 문자 오름차순 정렬 (대소문자 구분 X)
const arr = ['banana', 'b', 'Boy'];
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;
});
// ['b', 'banana', 'Boy']
- 문자 내림차순 정렬 (대소문자 구분 X)
const arr = ['banana', 'b', 'Boy'];
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;
});
// Boy,banana,b
object 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;
});
// {"name":"orange","price":500}
// {"name":"apple","price":1000}
// {"name":"banana","price":3000}
- 객체 내림차순 정렬
const arr = [
{name: 'banana', price: 3000},
{name: 'apple', price: 1000},
{name: 'orange', price: 500}
];
arr.sort(function(a, b) {
return b.price - a.price;
});
// {"name":"banana","price":3000}
// {"name":"apple","price":1000}
// {"name":"orange","price":500}
출처: https://hianna.tistory.com/409 [어제 오늘 내일]