sort 메서드

김정준·2022년 6월 5일
0

JS

목록 보기
7/13

1) sort 메서드

   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']

2) 숫자요소로 이루어진 배열을 정렬

   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]

3) 객체를 요소로 갖는 배열을 정렬

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'}
]
*/

0개의 댓글