[JavaScript] 정렬 함수 sort()

dev·2022년 8월 20일
post-thumbnail

개요

자바스크립트 정렬 함수 sort()문 이해 (이해하기 너무 힘들었던 1인)

📌 sort()함수는 배열을 재정렬해주는 메소드지만 배열 자체가 변경되기 때문에 사용할때 주의해야함

sort() 함수

arr.sort([compareFunction])

sort()를 사용하면, 배열의 element들을 문자열로 취급하고, 유니코드 값의 순서대로 정렬이 된다.
compareFunction은 두 개의 배열(a,b)를 element를 파라미터로 입력을 받고,
여기서 가장 중요한건 리턴하는 값이 0보다 작을 경우는 a가 b보다 앞에 오도록 정렬을하고,
만약 리턴하는 값이 0보다 클 경우에는 b가 a보다 앞에 오도록 정렬을 한다.
또한 0을 리턴하면 a,b의 순서를 변경하지 않는다.

🔎 코드를 보면서 이해를 해보도록 하자

📎 숫자 정렬 예제

let arr = [1, 3, 5, 2, 4];

arr.sort();
console.log(arr);  // [1, 2, 3, 4, 5]

결과값이 오름차순으로 나오는 이유는 sort()함수는 유니코드에 순서에 따라서 정렬이 되기 때문에 오름차순으로 정렬이 잘 된다.

하.지.만

let arr = [1, 3, 5, 10, 2];

arr.sort();
console.log(arr); // [1, 10, 2, 3, 5]

이 코드는 왜 오름차순으로 정확하게 정렬이 되지 않았을까?
그 이유는 유니코드에 있다.
아까 우리가 처음 sort()함수를 설명할때 sort()를 사용하면 element들을 문자열로 취급하고, 유니코드 값의 순서대로 정렬이 된다고 나와 있다.
바로 그 이유이다. ([유니코드]:(https://url.kr/r4l89o) 참고 하도록 하자.)
유니코드로 정렬을 하게 되면 10이 2보다 유니코드에서 앞에 있기 때문에 [1, 10, 2, 3, 5]로 결과 값이 나오는 것이다.

우리는 [1, 2, 3, 5, 10]의 순서로 정렬하기 위해서

let arr = [1, 3, 5, 10, 2];

arr.sort(function(a, b) { // arr.sort((a, b) => a - b)
  return a - b;
});
console.log(arr); // [1, 2, 3, 5, 10]

이러한 코드를 사용해야 한다.
아마 사람들은 왜 a - b을 하는지 궁금해 할건데,
sort()함수는 리턴하는 값이 0보다 작을 경우에 a가 b보다 앞에 오도록 정렬하고,
리턴하는 값이 0보다 큰 경우에는 b가 a보다 앞에 오도록 정렬이 된다.
또한 리턴하는 값이 0이면 아무것도 바꾸지 않는다. 따라서 [1, 2, 3, 5, 10]으로 결과 값을 구할수 있었다.
반대로 내림차순으로 구하고 싶다면 reverse()를 사용하거나 a - bb - a로 바꾸어 주면 된다.


📎 문자열 정렬

let arr = ['hello', 'a', 'b', 'c'];

arr.sort();
console.log(arr); // ['a', 'b', 'c', 'hello'];

유니코드는 알파벳순으로 정렬할때 개꿀이다.

profile
오늘의 발견

0개의 댓글