이번 포스팅에서는 자주 사용했지만 정확한 작동원리는 알지 못했던 sort메서드를 다뤄보려고 한다. sort
메서드는 원본 배열을 변경하며 배열의 요소를 정렬한다. 기본적으로 오름차순으로 요소를 정렬한다. 사용 문법은 다음과 같다.
arr.sort([compareFunction])
- 매개변수
compareFunction(Optional)
정렬 순서를 정의하는 함수. 생략하면 배열은 각 요소의 문자열 변환에 따라 각 문자의 유니코드 코드 포인트 값에 따라 정렬된다.
const food = ['pasta', 'noodle', 'hamburger'];
food.sort();
console.log(food); // ["hamburger", "noodle", "pasta"]
sort
메서드를 사용해서 오름차순으로 정렬한 다음, reverse
메서드를 사용하면 내림차순으로 정렬할 수 있다.const food = ['pasta', 'noodle', 'hamburger'];
food.sort();
food.reverse();
console.log(food); // ["pasta", "noodle", "hamburger"]
sort
메서드의 기본 정렬 순서는 유니코드 코드 포인트의 순서를 다른다. 배열의 요소가 숫자 타입이더라도 일시적으로 문자열로 변환한 후 유니코드 코드 포인트의 순서를 기준으로 정렬한다.const num = [2, 1, 100, 4, 5, 8];
num.sort();
// 숫자로 구성된 배열은 위의 코드처럼 오름차순으로 정렬되지 않는다.
console.log(num); // [1, 100, 2, 4, 5, 8]
function sortCompare(a, b) {
if (a < b) return -1;
if (a > b) return 1;
if (a === b) return 0;
}
const num = [2, 1, 100, 4, 5, 8];
num.sort((a, b) => a - b);
console.log(num); // [1, 2, 4, 5, 8, 100]
const num = [2, 1, 100, 4, 5, 8];
num.sort((a, b) => b - a);
console.log(num); // [100, 8, 5, 4, 2, 1]
const obj = [
{ num: 1, name: 'Kim'},
{ num: 2, name: 'Lee'},
{ num: 3, name: 'Kang'}
];
function compare(key) {
return (a, b) => {
if (a[key] > b[key]) {
return 1;
}
if (a[key] < b[key]) {
return -1;
}
return 0;
}
}
// key값(num)을 기준으로 오름차순 정렬하기
obj.sort(compare('num'));
// value값(name)을 기준으로 오름차순 정렬하기
obj.sort(compare('name'));
출처: 모던 자바스크립트 Deep Dive, MDN