본문 바로가기

TIL/기록

[TIL] 08 sort() 함수

sort() 함수 정리

배열의 정렬 순서를 정의하기 위해 사용하는 메소드

arr.sort([compareFunction])

 

sort() 함수 숫자 오름차순으로 정렬하기

 

sort() 를 쓴다고해서 바로 오름차순으로 정렬이 되는 것이 아니다.

const arr1 = [21, 6, 3, 15];
const arr2 = ['banana', 'apple', 'orange'];

console.log(arr1.sort()); //[ 15, 21, 3, 6 ]

console.log(arr2.sort()); //[ 'apple', 'banana', 'orange' ]

파라미터(compareFunction)가 입력되지 않으면, 유니코드 순서에 따라서 값을 정렬한다.

15에서 1, 21에서 2, 3, 6 이런 순서로 반환된 것이 나왔다.

 

이렇게 될 때, 방법과 동작방식에 대해 이해하기 쉽게 정리한 것을 보고나서 동작 방식을 확실히 알게되었다. 

 

 

1.  파라미터로 함수 정의하기

 

const arr = [21, 19, 3, 6];

arr.sort(function (a, b) {
	if(a > b) {
    	return 1;
    }else if(a === b){
    	return 0;
    }else {
    	return -1;
    }
})

console.log(arr); //[ 3, 6, 19, 21 ]

 

 

2.  두 숫자의 차가 양수값이냐, 음수값이냐를 이용

const arr2 = [21, 19, 3, 6];

arr2.sort(function (a, b) {
	return a - b;
});
console.log(arr2); //[ 3, 6, 19, 21 ]

 

- 2번째의 동작방식 :

a와 b의 값에 arr2[0] 과 arr2[1]를 비교해서 21 - 19 = 2 로 결과값이 2로 양수이다.

return 값으로 양수 2를 전달하고 배열 안에있는 두 값의 순서를 바꾼다. 

 

그 다음 arr2[0]과 arr2[2] 을 비교해서 21 - 3 = 18 로 결과값이 18로 양수이다. 

그래서 또 21과 3의 순서를 바꾼다.

이런식으로 계속 두 인자를 비교해서 결과값이 양수가 나오면 순서를 바꾸고, 

음수가 나오면 자리를 바꾸지 않고, 순서를 그대로 유지한다.

 

 

sort() 함수 숫자 내림차순으로 정렬하기

const arr = [21, 1, 3, 10];

arr.sort( function (a, b) {
	return b - a;
})

console.log(arr); //[ 21, 10, 3, 1 ]

 

 

sort() 함수로 문자열 정렬하기

const arr = ['cat', 'banana', 'puppy', 'boy', 'a'];

arr.sort();

console.log(arr); //[ 'a', 'banana', 'boy', 'cat', 'puppy' ]

 

 

sort() 함수로 객체 정렬하기

// price 기준으로 오름차순 정렬하기
const arr = [
	{ name: 'orange', price: 13500 },
	{ name: 'apple', price: 10000 },
	{ name: 'grape', price: 22500 },
];

arr.sort(function (a, b) {
	return a.price - b.price;
});

console.log(arr);
/**
[
  { name: 'apple', price: 10000 },
  { name: 'orange', price: 13500 },
  { name: 'grape', price: 22500 }
]
 */

 

 

 

sort 함수 작동 방법을 몰랐는데 이렇게 가볍게 정리하니 이해가 더 잘됐다.

 

'TIL > 기록' 카테고리의 다른 글

[TIL] 10  (1) 2024.01.08
[TIL] 09  (1) 2024.01.05
[TIL] 07 프로그래머스  (0) 2024.01.03
[TIL] 06 문자열 정리  (0) 2024.01.02
[TIL] 팀프로젝트 회고  (0) 2023.12.29