Javascript

(javascript 기초) Array.sort() 배열 순서 정렬 메소드

보오 2021. 12. 26. 14:50

실무에서도 많이 쓰이지만, 특히 알고리즘에서 매우 빈번하게 등장하는 자바스크립트의 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];
});