배열 정렬 메서드 sort
sort 기본 문법
✓ Array.sort([compareFunction])
✓ compareFunction 함수가 정의 되지 않은 기본값에 대해서는 요소를 문자열로 치환하여 유니코드 기반 오름차순 정렬한다.
✓ compareFunction 함수가 정의 되어 있다면, 함수의 반환값에 따라 정렬을 수행한다.
✓ sort 함수는 복제본에 수행되지 않고 원본에 수정을 수행한다.
※ 비교함수를 사용하지 않고 sort를 사용하면 문자열로 변환 후 유니코드 기반 정렬을 한다는것에 주의하자.
compareFunction 함수가 정의 되지 않은 CASE
const normal = [40, 5, 1, 7];
normal.sort(); // 기본 정렬 : 유니코드 기반 오름차순
console.log(normal); // [ 1, 40, 5, 7]
compareFunction 형식
✓ 결과값이 0 보다 작을 경우 a 가 낮은 색인
✓ 결과값이 0 보다 큰 경우 b 가 낮은 색인
function compare(a, b) {
if (a is less than b by some ordering criterion) {
return -1; // a < b 이면서 a가 낮은 색인 즉, 오름차순
}
if (a is greater than b by the ordering criterion) {
return 1; // a > b 이면서 b가 낮은 색인 즉, 오름차순
}
// a must be equal to b
return 0;
}
✓ 숫자 비교시 .. a-b 오름차순, b-a 내림차순
const sortArray = [40, 5, 1, 7];
sortArray.sort(function (a, b) {
// 숫자 비교를 위해
// a - b 의 결과가 양수 => a 가 크다. => 결과값이 양수(b가 낮은 색인) => [b , a] => 오름차순
// a - b 의 결과가 음수 => b 가 크다. => 결과값이 음수(a가 낮은 색인) => [a , b] => 오름차순
return a - b;
});
console.log(sortArray); // [ 1, 5, 7, 40 ]
sortArray.sort(function (a, b) {
// 숫자 비교를 위해
// b - a 의 결과가 양수 => b 가 크다. => 결과값이 양수(b가 낮은 색인) => [b , a] => 내림치순
// b - a 의 결과가 음수 => a 가 크다. => 결과값이 음수(a가 낮은 색인) => [a , b] => 내림차순
return b - a;
});
console.log(sortArray); // [ 40, 7, 5, 1 ]
객체배열 일때
var items = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 37 },
{ name: 'And', value: 45 },
{ name: 'The', value: -12 },
{ name: 'Magnetic', value: 13 },
{ name: 'Zeros', value: 37 },
];
// value 기준으로 정렬
items.sort(function (a, b) {
if (a.value > b.value) {
return 1;
}
if (a.value < b.value) {
return -1;
}
// a must be equal to b
return 0;
});
console.log(items);
// name 기준으로 정렬
items.sort(function (a, b) {
var nameA = a.name.toUpperCase(); // ignore upper and lowercase
var nameB = b.name.toUpperCase(); // ignore upper and lowercase
if (nameA < nameB) {
return -1;
// a가 낮은 색인
// a < b
// [a, b] 오름차순
}
if (nameA > nameB) {
return 1;
// b가 낮은 색인
// a > b
// [b, a] 오름차순
}
// 이름이 같을 경우
return 0;
});
console.log(items);
'JavaScript' 카테고리의 다른 글
[JavaScript] 스코프와 비동기적 실행,렉시컬 환경, 클로저 (0) | 2023.12.13 |
---|---|
[JavaScript]객체의 메서드에 this를 쓸때 헷갈리는 동작 (0) | 2023.08.29 |
[JavaScript] var로 선언된 변수가 선언되기 이전에도 접근할 수 있는 이유 (feat. 스코프&호이스팅) (0) | 2023.07.26 |