실무에서도 많이 쓰이지만, 특히 알고리즘에서 매우 빈번하게 등장하는 자바스크립트의 Array.prototype.sort에 대해 알아보자.
sort 정렬하는 메소드
<sort의 특징>
(1) array의 각 원소를 일시적으로 문자열로 치환하여 정렬한다. (2) 원본 배열을 변경한다. |
let arr = ['banana', 'earth', 'red', 'blue'];
arr.sort();
console.log(arr); // ['banana', 'blue', 'earth', 'red']
arr = [1, 150, 39, 84, 6]
arr.sort();
console.log(arr) // [1, 150, 39, 6, 84] -> 문자열로 취급하였기 때문
숫자 오름차순으로 정렬하고 싶다면?
크기를 비교하는 callback함수를 인자로 보낸다.
Array.sort((a, b) => a-b);
arr = [1, 150, 39, 84, 6]
const callbackFn = (a, b)=>a-b;
arr.sort(callbackFn);
console.log(arr) // [ 1, 6, 39, 84, 150 ]
⇒ 실무에서는 로직 하나하나 구현하기 번거롭기 때문에 lodash을 많이 사용한다고 함.
_.sortBy(arr);
(1) 파라미터를 생략하는 경우(default): Array.sort()
ASCII 문자 기준 오름차순 정렬
숫자 10이 3보다 앞에 정렬되는 이유? 아스키로 정렬할 때 숫자는 일시적으로 문자로 형변환 되기 때문.
형변환 이후 첫번째 문자를 기준으로 정렬됨.
(2) 인자로 compareFuntion 넣기: (a, b)=> a - b
반환 값이 0보다 작은 경우: a가 b보다 앞에 온다 반환 값이 0인 경우: 순서 그대로 유지 반환 값이 0보다 큰 경우: b가 a보다 앞에 온다 |
📌 숫자 오름차순, 내림차순 정렬
arr.sort((a, b)=> a-b); // **숫자 오름차순 정렬 ex) 1, 2, 3, 4, ...**
arr.sort((a, b)=> b-a); // **숫자 내림차순 정렬 ex) 10, 9, 8, 7, ...**
📌 좌표정렬
(x, y)로 이루어진 배열을 x 오름차순, x가 같으면 y오름차순으로 정렬하기
arr.sort((a, b) => {
if (a[0] === b[0]) return a[1] - b[1];
else return a[0] - b[0];
});
'Javascript' 카테고리의 다른 글
Javascript - 호이스팅에 관하여 (0) | 2022.05.01 |
---|---|
캐시에 관한 최소한의 모든 것(1) (0) | 2022.02.27 |
[JS]강의록-객체지향 프로그래밍(생활코딩) (0) | 2022.02.05 |