sort
메서드는 배열의 요소를 정렬한다. 원본 배열을 직접 변경
하며 정렬된 배열을 반환한다.
sort
메서드는 기본적으로 오름차순으로 요소를 정렬한다. 따라서 내림차순으로 요소를 정렬하려면 sort
메서드를 사용하여 오름차순으로 정렬한 후 reverse
메서드를 사용하여 요소의 순서를 뒤집는다.
const fruits = ['Banana','Orange','Apple']; // 오름차순 정렬 fruits.sort(); // sort 메서드는 원본 배열을 직접 변경한다. console.log(fruits); // ['Apple', 'Banana', 'Orange'] // 내림차순 정렬 fruits.reverse() // reverse 메서드도 원본 배열을 직접 변경한다. console.log(fruits); // ['Orange', 'Banana', 'Apple']
sort
메서드의 기본 정렬 순서는 유니코드 코드 포인트의 순서를 따른다. 배열의 요소가 숫자 타입이라 할지라도 배열의 요소를 일시적
으로 문자열
로 변환한 후 유니코드 코드 포인트의 순서를 기준으로 정렬한다.
따라서 숫자 요소를 정렬할 때는 sort
메서드에 정렬 순서를 정의하는 비교함수를 인수로 전달
해야 한다. 비교함수는 양수나 음수 또는 0
을 반환해야 한다. 비교 함수의 반환값이 0보다 작으면
비교 함수의 첫 번째 인수를 우선하여 정렬하고, 0 이면
정렬하지 않으며, 0 보다 크면
두번 째 인수를 우선하여 정렬한다.
const points1 = [40, 100, 1, 5, 2, 25,10]; const points2 = [40, 100, 1, 5, 2, 25,10]; // 숫자 배열의 정렬. // 비교함수의 반환값이 0 보다 작으면 a를 우선하여 정렬 // 비교함수의 반환값이 0 보다 크면 b를 우선하여 정렬 points1.sort((a,b) => a - b) console.log(points1); // [1, 2, 5, 10, 25, 40, 100] points2.sort((a,b) => b - a) console.log(points2); // [100, 40, 25, 10, 5, 2, 1]
const todos = [ {id : 4, content : 'JavaScript'}, {id : 1, content :'HTML'}, {id : 2, content:'CSS'} ]; // 비교 함수, 매개변수 key는 프로퍼티 키다. function compare(key){ return (a,b)=>(a[key] > b[key] ? 1 : (a[key] < b[key] ? -1 : 0)); } // id를 기준으로 오름차순 정렬 todos.sort(compare('id')); console.log(todos) /* [ {id: 1, content: 'HTML'} {id: 2, content: 'CSS'} {id: 4, content: 'JavaScript'} ] */ // content를 기준으로 오름차순 정렬 todos.sort(compare('content')); console.log(todos); /* [ {id: 2, content: 'CSS'} {id: 1, content: 'HTML'} {id: 4, content: 'JavaScript'} ] */